@@ -99,13 +99,15 @@ def TestFusion: SimpleFusion<"test-fusion", "HasTestFusion", "Test Fusion",
99
99
// CHECK-PREDICATOR-NEXT: if (( MI->getOpcode() != Test::Inst0 ))
100
100
// CHECK-PREDICATOR-NEXT: return false;
101
101
// CHECK-PREDICATOR-NEXT: }
102
- // CHECK-PREDICATOR-NEXT: {
103
- // CHECK-PREDICATOR-NEXT: const MachineInstr *MI = &SecondMI;
104
- // CHECK-PREDICATOR-NEXT: if (!(
105
- // CHECK-PREDICATOR-NEXT: MI->getOperand(0).getReg().isVirtual()
106
- // CHECK-PREDICATOR-NEXT: || MI->getOperand(0).getReg() == MI->getOperand(1).getReg()
107
- // CHECK-PREDICATOR-NEXT: ))
108
- // CHECK-PREDICATOR-NEXT: return false;
102
+ // CHECK-PREDICATOR-NEXT: if (!SecondMI.getOperand(0).getReg().isVirtual()) {
103
+ // CHECK-PREDICATOR-NEXT: if (SecondMI.getOperand(0).getReg() != SecondMI.getOperand(1).getReg()) {
104
+ // CHECK-PREDICATOR-NEXT: if (!SecondMI.getDesc().isCommutable())
105
+ // CHECK-PREDICATOR-NEXT: return false;
106
+ // CHECK-PREDICATOR-NEXT: unsigned SrcOpIdx1 = 1, SrcOpIdx2 = TargetInstrInfo::CommuteAnyOperandIndex;
107
+ // CHECK-PREDICATOR-NEXT: if (TII.findCommutedOpIndices(SecondMI, SrcOpIdx1, SrcOpIdx2))
108
+ // CHECK-PREDICATOR-NEXT: if (SecondMI.getOperand(0).getReg() != SecondMI.getOperand(SrcOpIdx2).getReg())
109
+ // CHECK-PREDICATOR-NEXT: return false;
110
+ // CHECK-PREDICATOR-NEXT: }
109
111
// CHECK-PREDICATOR-NEXT: }
110
112
// CHECK-PREDICATOR-NEXT: {
111
113
// CHECK-PREDICATOR-NEXT: Register FirstDest = FirstMI->getOperand(0).getReg();
@@ -114,8 +116,14 @@ def TestFusion: SimpleFusion<"test-fusion", "HasTestFusion", "Test Fusion",
114
116
// CHECK-PREDICATOR-NEXT: }
115
117
// CHECK-PREDICATOR-NEXT: if (!(FirstMI->getOperand(0).isReg() &&
116
118
// CHECK-PREDICATOR-NEXT: SecondMI.getOperand(1).isReg() &&
117
- // CHECK-PREDICATOR-NEXT: FirstMI->getOperand(0).getReg() == SecondMI.getOperand(1).getReg()))
118
- // CHECK-PREDICATOR-NEXT: return false;
119
+ // CHECK-PREDICATOR-NEXT: FirstMI->getOperand(0).getReg() == SecondMI.getOperand(1).getReg())) {
120
+ // CHECK-PREDICATOR-NEXT: if (!SecondMI.getDesc().isCommutable())
121
+ // CHECK-PREDICATOR-NEXT: return false;
122
+ // CHECK-PREDICATOR-NEXT: unsigned SrcOpIdx1 = 1, SrcOpIdx2 = TargetInstrInfo::CommuteAnyOperandIndex;
123
+ // CHECK-PREDICATOR-NEXT: if (TII.findCommutedOpIndices(SecondMI, SrcOpIdx1, SrcOpIdx2))
124
+ // CHECK-PREDICATOR-NEXT: if (FirstMI->getOperand(0).getReg() != SecondMI.getOperand(SrcOpIdx2).getReg())
125
+ // CHECK-PREDICATOR-NEXT: return false;
126
+ // CHECK-PREDICATOR-NEXT: }
119
127
// CHECK-PREDICATOR-NEXT: return true;
120
128
// CHECK-PREDICATOR-NEXT: }
121
129
// CHECK-PREDICATOR-NEXT: } // end namespace llvm
0 commit comments