| 519 | } |
| 520 | |
| 521 | bool InstructionFolder::IsFoldableOpcode(spv::Op opcode) const { |
| 522 | // NOTE: Extend to more opcodes as new cases are handled in the folder |
| 523 | // functions. |
| 524 | switch (opcode) { |
| 525 | case spv::Op::OpBitwiseAnd: |
| 526 | case spv::Op::OpBitwiseOr: |
| 527 | case spv::Op::OpBitwiseXor: |
| 528 | case spv::Op::OpIAdd: |
| 529 | case spv::Op::OpIEqual: |
| 530 | case spv::Op::OpIMul: |
| 531 | case spv::Op::OpINotEqual: |
| 532 | case spv::Op::OpISub: |
| 533 | case spv::Op::OpLogicalAnd: |
| 534 | case spv::Op::OpLogicalEqual: |
| 535 | case spv::Op::OpLogicalNot: |
| 536 | case spv::Op::OpLogicalNotEqual: |
| 537 | case spv::Op::OpLogicalOr: |
| 538 | case spv::Op::OpNot: |
| 539 | case spv::Op::OpSDiv: |
| 540 | case spv::Op::OpSelect: |
| 541 | case spv::Op::OpSGreaterThan: |
| 542 | case spv::Op::OpSGreaterThanEqual: |
| 543 | case spv::Op::OpShiftLeftLogical: |
| 544 | case spv::Op::OpShiftRightArithmetic: |
| 545 | case spv::Op::OpShiftRightLogical: |
| 546 | case spv::Op::OpSLessThan: |
| 547 | case spv::Op::OpSLessThanEqual: |
| 548 | case spv::Op::OpSMod: |
| 549 | case spv::Op::OpSNegate: |
| 550 | case spv::Op::OpSRem: |
| 551 | case spv::Op::OpSConvert: |
| 552 | case spv::Op::OpUConvert: |
| 553 | case spv::Op::OpUDiv: |
| 554 | case spv::Op::OpUGreaterThan: |
| 555 | case spv::Op::OpUGreaterThanEqual: |
| 556 | case spv::Op::OpULessThan: |
| 557 | case spv::Op::OpULessThanEqual: |
| 558 | case spv::Op::OpUMod: |
| 559 | return true; |
| 560 | default: |
| 561 | return false; |
| 562 | } |
| 563 | } |
| 564 | |
| 565 | bool InstructionFolder::IsFoldableConstant( |
| 566 | const analysis::Constant* cst) const { |
no outgoing calls
no test coverage detected