]> granicus.if.org Git - llvm/commitdiff
[ARM] GlobalISel: Fix oversight in G_FCMP legalization
authorDiana Picus <diana.picus@linaro.org>
Tue, 11 Jul 2017 09:43:51 +0000 (09:43 +0000)
committerDiana Picus <diana.picus@linaro.org>
Tue, 11 Jul 2017 09:43:51 +0000 (09:43 +0000)
We used to forget to erase the original instruction when replacing a
G_FCMP true/false. Fix this bug and make sure the tests check for it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307639 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMLegalizerInfo.cpp
test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir

index 6b082487ce2ca8cbb5369487ec92446e8ad409be..f23e62595d2e9f9a247d4d6e2f53261a3129e4fb 100644 (file)
@@ -295,6 +295,7 @@ bool ARMLegalizerInfo::legalizeCustom(MachineInstr &MI,
              "Predicate needs libcalls, but none specified");
       MIRBuilder.buildConstant(OriginalResult,
                                Predicate == CmpInst::FCMP_TRUE ? 1 : 0);
+      MI.eraseFromParent();
       return true;
     }
 
index f23a4434ba658cdaac8d9eb1308687e01a3d7f6e..f2c2719b8fd349e5e29930d2ef274a354a2ff603 100644 (file)
@@ -337,8 +337,10 @@ body:             |
     ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
     %2(s1) = G_FCMP floatpred(true), %0(s32), %1
     ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(true), [[X]](s32), [[Y]]
+    ; SOFT-NOT: G_FCMP
     ; SOFT: [[REXT:%[0-9]+]](s32) = G_CONSTANT i32 -1
     ; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]](s32)
+    ; SOFT-NOT: G_FCMP
     %3(s32) = G_ZEXT %2(s1)
     ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
     %r0 = COPY %3(s32)
@@ -368,8 +370,10 @@ body:             |
     ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1
     %2(s1) = G_FCMP floatpred(false), %0(s32), %1
     ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(false), [[X]](s32), [[Y]]
+    ; SOFT-NOT: G_FCMP
     ; SOFT: [[REXT:%[0-9]+]](s32) = G_CONSTANT i32 0
     ; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]](s32)
+    ; SOFT-NOT: G_FCMP
     %3(s32) = G_ZEXT %2(s1)
     ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
     %r0 = COPY %3(s32)
@@ -984,8 +988,10 @@ body:             |
     ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
     %6(s1) = G_FCMP floatpred(true), %4(s64), %5
     ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(true), [[X]](s64), [[Y]]
+    ; SOFT-NOT: G_FCMP
     ; SOFT: [[REXT:%[0-9]+]](s32) = G_CONSTANT i32 -1
     ; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]](s32)
+    ; SOFT-NOT: G_FCMP
     %7(s32) = G_ZEXT %6(s1)
     ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
     %r0 = COPY %7(s32)
@@ -1027,8 +1033,10 @@ body:             |
     ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32)
     %6(s1) = G_FCMP floatpred(false), %4(s64), %5
     ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(false), [[X]](s64), [[Y]]
+    ; SOFT-NOT: G_FCMP
     ; SOFT: [[REXT:%[0-9]+]](s32) = G_CONSTANT i32 0
     ; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]](s32)
+    ; SOFT-NOT: G_FCMP
     %7(s32) = G_ZEXT %6(s1)
     ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1)
     %r0 = COPY %7(s32)