From 301859ba896dadddfc26069ce64d503fe6958cbf Mon Sep 17 00:00:00 2001 From: Diana Picus Date: Tue, 11 Jul 2017 10:52:08 +0000 Subject: [PATCH] [ARM] GlobalISel: Tighten legalizer tests. NFC Make sure that all the legalizer tests where the original instruction needs to be removed check for the removal. We do this by adding CHECK-NOT lines before and after the replacement sequence. This won't catch pathological cases where the instruction remains somewhere in the middle of the instruction sequence that's supposed to replace it, but hopefully that won't occur in practice (since ideally we'd be setting the insert point for the new instruction sequence either before or after the original instruction and not fiddle with it while building the sequence). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307647 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../ARM/GlobalISel/arm-legalize-divmod.mir | 20 ++++++ .../ARM/GlobalISel/arm-legalize-fp.mir | 72 +++++++++++++++++++ test/CodeGen/ARM/GlobalISel/arm-legalizer.mir | 18 +++++ 3 files changed, 110 insertions(+) diff --git a/test/CodeGen/ARM/GlobalISel/arm-legalize-divmod.mir b/test/CodeGen/ARM/GlobalISel/arm-legalize-divmod.mir index c93e7fa0ec5..9a0877846fc 100644 --- a/test/CodeGen/ARM/GlobalISel/arm-legalize-divmod.mir +++ b/test/CodeGen/ARM/GlobalISel/arm-legalize-divmod.mir @@ -36,6 +36,7 @@ body: | %0(s32) = COPY %r0 %1(s32) = COPY %r1 ; HWDIV: [[R:%[0-9]+]](s32) = G_SDIV [[X]], [[Y]] + ; SOFT-NOT: G_SDIV ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -44,6 +45,7 @@ body: | ; SOFT-DEFAULT: BLX $__divsi3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_SDIV %2(s32) = G_SDIV %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s32) @@ -70,6 +72,7 @@ body: | %0(s32) = COPY %r0 %1(s32) = COPY %r1 ; HWDIV: [[R:%[0-9]+]](s32) = G_UDIV [[X]], [[Y]] + ; SOFT-NOT: G_UDIV ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -78,6 +81,7 @@ body: | ; SOFT-DEFAULT: BLX $__udivsi3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_UDIV %2(s32) = G_UDIV %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s32) @@ -106,6 +110,7 @@ body: | %0(s16) = COPY %r0 %1(s16) = COPY %r1 ; HWDIV: [[R32:%[0-9]+]](s32) = G_SDIV [[X32]], [[Y32]] + ; SOFT-NOT: G_SDIV ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X32]] ; SOFT-DAG: %r1 = COPY [[Y32]] @@ -114,7 +119,9 @@ body: | ; SOFT-DEFAULT: BLX $__divsi3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT-DEFAULT: [[R32:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_SDIV ; CHECK: [[R:%[0-9]+]](s16) = G_TRUNC [[R32]] + ; SOFT-NOT: G_SDIV %2(s16) = G_SDIV %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s16) @@ -143,6 +150,7 @@ body: | %0(s16) = COPY %r0 %1(s16) = COPY %r1 ; HWDIV: [[R32:%[0-9]+]](s32) = G_UDIV [[X32]], [[Y32]] + ; SOFT-NOT: G_UDIV ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X32]] ; SOFT-DAG: %r1 = COPY [[Y32]] @@ -151,7 +159,9 @@ body: | ; SOFT-DEFAULT: BLX $__udivsi3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT-DEFAULT: [[R32:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_UDIV ; CHECK: [[R:%[0-9]+]](s16) = G_TRUNC [[R32]] + ; SOFT-NOT: G_UDIV %2(s16) = G_UDIV %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s16) @@ -180,6 +190,7 @@ body: | %0(s8) = COPY %r0 %1(s8) = COPY %r1 ; HWDIV: [[R32:%[0-9]+]](s32) = G_SDIV [[X32]], [[Y32]] + ; SOFT-NOT: G_SDIV ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X32]] ; SOFT-DAG: %r1 = COPY [[Y32]] @@ -188,7 +199,9 @@ body: | ; SOFT-DEFAULT: BLX $__divsi3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT-DEFAULT: [[R32:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_SDIV ; CHECK: [[R:%[0-9]+]](s8) = G_TRUNC [[R32]] + ; SOFT-NOT: G_SDIV %2(s8) = G_SDIV %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s8) @@ -217,6 +230,7 @@ body: | %0(s8) = COPY %r0 %1(s8) = COPY %r1 ; HWDIV: [[R32:%[0-9]+]](s32) = G_UDIV [[X32]], [[Y32]] + ; SOFT-NOT: G_UDIV ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X32]] ; SOFT-DAG: %r1 = COPY [[Y32]] @@ -225,7 +239,9 @@ body: | ; SOFT-DEFAULT: BLX $__udivsi3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT-DEFAULT: [[R32:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_UDIV ; CHECK: [[R:%[0-9]+]](s8) = G_TRUNC [[R32]] + ; SOFT-NOT: G_UDIV %2(s8) = G_UDIV %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s8) @@ -254,6 +270,7 @@ body: | ; HWDIV: [[Q:%[0-9]+]](s32) = G_SDIV [[X]], [[Y]] ; HWDIV: [[P:%[0-9]+]](s32) = G_MUL [[Q]], [[Y]] ; HWDIV: [[R:%[0-9]+]](s32) = G_SUB [[X]], [[P]] + ; SOFT-NOT: G_SREM ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -262,6 +279,7 @@ body: | ; SOFT-DEFAULT: BLX $__modsi3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_SREM %2(s32) = G_SREM %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s32) @@ -290,6 +308,7 @@ body: | ; HWDIV: [[Q:%[0-9]+]](s32) = G_UDIV [[X]], [[Y]] ; HWDIV: [[P:%[0-9]+]](s32) = G_MUL [[Q]], [[Y]] ; HWDIV: [[R:%[0-9]+]](s32) = G_SUB [[X]], [[P]] + ; SOFT-NOT: G_UREM ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -298,6 +317,7 @@ body: | ; SOFT-DEFAULT: BLX $__umodsi3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_UREM %2(s32) = G_UREM %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s32) diff --git a/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir b/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir index f2c2719b8fd..cb61f95b10c 100644 --- a/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir +++ b/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir @@ -69,6 +69,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %0(s32) = COPY %r0 %1(s32) = COPY %r1 + ; CHECK-NOT: G_FREM ; CHECK: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -79,6 +80,7 @@ body: | ; SOFT: [[R:%[0-9]+]](s32) = COPY %r0 ; HARD: [[R:%[0-9]+]](s32) = COPY %s0 ; CHECK: ADJCALLSTACKUP + ; CHECK-NOT: G_FREM %2(s32) = G_FREM %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s32) @@ -124,6 +126,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]] %4(s64) = G_MERGE_VALUES %0(s32), %1(s32) %5(s64) = G_MERGE_VALUES %2(s32), %3(s32) + ; CHECK-NOT: G_FREM ; CHECK: ADJCALLSTACKDOWN ; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]] ; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]] @@ -134,6 +137,7 @@ body: | ; SOFT: BLX $fmod, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1 ; HARD: BLX $fmod, {{.*}}, implicit %d0, implicit %d1, implicit-def %d0 ; CHECK: ADJCALLSTACKUP + ; CHECK-NOT: G_FREM %6(s64) = G_FREM %4, %5 %7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64) %r0 = COPY %7(s32) @@ -160,6 +164,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %0(s32) = COPY %r0 %1(s32) = COPY %r1 + ; CHECK-NOT: G_FPOW ; CHECK: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -170,6 +175,7 @@ body: | ; SOFT: [[R:%[0-9]+]](s32) = COPY %r0 ; HARD: [[R:%[0-9]+]](s32) = COPY %s0 ; CHECK: ADJCALLSTACKUP + ; CHECK-NOT: G_FPOW %2(s32) = G_FPOW %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s32) @@ -215,6 +221,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]] %4(s64) = G_MERGE_VALUES %0(s32), %1(s32) %5(s64) = G_MERGE_VALUES %2(s32), %3(s32) + ; CHECK-NOT: G_FPOW ; CHECK: ADJCALLSTACKDOWN ; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]] ; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]] @@ -225,6 +232,7 @@ body: | ; SOFT: BLX $pow, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1 ; HARD: BLX $pow, {{.*}}, implicit %d0, implicit %d1, implicit-def %d0 ; CHECK: ADJCALLSTACKUP + ; CHECK-NOT: G_FPOW %6(s64) = G_FPOW %4, %5 %7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64) %r0 = COPY %7(s32) @@ -252,6 +260,7 @@ body: | %0(s32) = COPY %r0 %1(s32) = COPY %r1 ; HARD: [[R:%[0-9]+]](s32) = G_FADD [[X]], [[Y]] + ; SOFT-NOT: G_FADD ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -259,6 +268,7 @@ body: | ; SOFT-DEFAULT: BLX $__addsf3, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 ; SOFT: [[R:%[0-9]+]](s32) = COPY %r0 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_FADD %2(s32) = G_FADD %0, %1 ; CHECK: %r0 = COPY [[R]] %r0 = COPY %2(s32) @@ -299,6 +309,7 @@ body: | %4(s64) = G_MERGE_VALUES %0(s32), %1(s32) %5(s64) = G_MERGE_VALUES %2(s32), %3(s32) ; HARD: [[R:%[0-9]+]](s64) = G_FADD [[X]], [[Y]] + ; SOFT-NOT: G_FADD ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]] ; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]] @@ -307,6 +318,7 @@ body: | ; SOFT-AEABI: BLX $__aeabi_dadd, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1 ; SOFT-DEFAULT: BLX $__adddf3, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1 ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_FADD %6(s64) = G_FADD %4, %5 ; HARD-DAG: G_UNMERGE_VALUES [[R]](s64) %7(s32),%8(s32) = G_UNMERGE_VALUES %6(s64) @@ -403,6 +415,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(oeq), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(oeq), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -413,6 +426,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -442,6 +456,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(ogt), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ogt), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -452,6 +467,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -481,6 +497,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(oge), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(oge), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -491,6 +508,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -520,6 +538,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(olt), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(olt), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -530,6 +549,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -559,6 +579,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(ole), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ole), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -569,6 +590,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -598,6 +620,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(ord), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ord), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -607,6 +630,7 @@ body: | ; SOFT: ADJCALLSTACKUP ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -636,6 +660,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(ugt), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ugt), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -646,6 +671,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -675,6 +701,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(uge), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(uge), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -685,6 +712,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -714,6 +742,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(ult), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ult), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -724,6 +753,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -753,6 +783,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(ule), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ule), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -763,6 +794,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -792,6 +824,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(une), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(une), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -802,6 +835,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -831,6 +865,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(uno), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(uno), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -841,6 +876,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -870,6 +906,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(one), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(one), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -880,6 +917,7 @@ body: | ; SOFT-AEABI: [[R1:%[0-9]+]](s1) = G_TRUNC [[RET1]] ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R1:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET1]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -894,6 +932,7 @@ body: | ; SOFT-DAG: [[R2EXT:%[0-9]+]](s32) = G_ANYEXT [[R2]] ; SOFT: [[REXT:%[0-9]+]](s32) = G_OR [[R1EXT]], [[R2EXT]] ; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -923,6 +962,7 @@ body: | ; CHECK-DAG: [[Y:%[0-9]+]](s32) = COPY %r1 %2(s1) = G_FCMP floatpred(ueq), %0(s32), %1 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ueq), [[X]](s32), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -933,6 +973,7 @@ body: | ; SOFT-AEABI: [[R1:%[0-9]+]](s1) = G_TRUNC [[RET1]] ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R1:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET1]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X]] ; SOFT-DAG: %r1 = COPY [[Y]] @@ -947,6 +988,7 @@ body: | ; SOFT-DAG: [[R2EXT:%[0-9]+]](s32) = G_ANYEXT [[R2]] ; SOFT: [[REXT:%[0-9]+]](s32) = G_OR [[R1EXT]], [[R2EXT]] ; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]] + ; SOFT-NOT: G_FCMP %3(s32) = G_ZEXT %2(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %3(s32) @@ -1078,6 +1120,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(oeq), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(oeq), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1090,6 +1133,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1131,6 +1175,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(ogt), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ogt), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1143,6 +1188,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1184,6 +1230,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(oge), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(oge), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1196,6 +1243,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1237,6 +1285,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(olt), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(olt), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1249,6 +1298,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1290,6 +1340,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(ole), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ole), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1302,6 +1353,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1343,6 +1395,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(ord), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ord), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1354,6 +1407,7 @@ body: | ; SOFT: ADJCALLSTACKUP ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1395,6 +1449,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(ugt), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ugt), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1407,6 +1462,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1448,6 +1504,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(uge), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(uge), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1460,6 +1517,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sge), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1501,6 +1559,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(ult), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ult), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1513,6 +1572,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(slt), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1554,6 +1614,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(ule), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ule), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1566,6 +1627,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(sle), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1607,6 +1669,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(une), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(une), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1619,6 +1682,7 @@ body: | ; SOFT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET]](s32), [[ZERO]] ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1660,6 +1724,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(uno), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(uno), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1672,6 +1737,7 @@ body: | ; SOFT-AEABI: [[R:%[0-9]+]](s1) = G_TRUNC [[RET]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R:%[0-9]+]](s1) = G_ICMP intpred(ne), [[RET]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1713,6 +1779,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(one), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(one), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1725,6 +1792,7 @@ body: | ; SOFT-AEABI: [[R1:%[0-9]+]](s1) = G_TRUNC [[RET1]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R1:%[0-9]+]](s1) = G_ICMP intpred(sgt), [[RET1]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1741,6 +1809,7 @@ body: | ; SOFT-DAG: [[R2EXT:%[0-9]+]](s32) = G_ANYEXT [[R2]] ; SOFT: [[REXT:%[0-9]+]](s32) = G_OR [[R1EXT]], [[R2EXT]] ; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) @@ -1782,6 +1851,7 @@ body: | ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_MERGE_VALUES [[Y0]](s32), [[Y1]](s32) %6(s1) = G_FCMP floatpred(ueq), %4(s64), %5 ; HARD: [[R:%[0-9]+]](s1) = G_FCMP floatpred(ueq), [[X]](s64), [[Y]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1794,6 +1864,7 @@ body: | ; SOFT-AEABI: [[R1:%[0-9]+]](s1) = G_TRUNC [[RET1]](s32) ; SOFT-DEFAULT: [[ZERO:%[0-9]+]](s32) = G_CONSTANT i32 0 ; SOFT-DEFAULT: [[R1:%[0-9]+]](s1) = G_ICMP intpred(eq), [[RET1]](s32), [[ZERO]] + ; SOFT-NOT: G_FCMP ; SOFT: ADJCALLSTACKDOWN ; SOFT-DAG: %r0 = COPY [[X0]] ; SOFT-DAG: %r1 = COPY [[X1]] @@ -1810,6 +1881,7 @@ body: | ; SOFT-DAG: [[R2EXT:%[0-9]+]](s32) = G_ANYEXT [[R2]] ; SOFT: [[REXT:%[0-9]+]](s32) = G_OR [[R1EXT]], [[R2EXT]] ; SOFT: [[R:%[0-9]+]](s1) = G_TRUNC [[REXT]] + ; SOFT-NOT: G_FCMP %7(s32) = G_ZEXT %6(s1) ; CHECK: [[REXT:%[0-9]+]](s32) = G_ZEXT [[R]](s1) %r0 = COPY %7(s32) diff --git a/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir b/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir index d66a16e6c2a..4575341dfc2 100644 --- a/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir +++ b/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir @@ -111,6 +111,7 @@ body: | %1(s8) = COPY %r1 %2(s8) = G_ADD %0, %1 ; G_ADD with s8 should widen + ; CHECK-NOT: {{%[0-9]+}}(s8) = G_ADD {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_ADD {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s8) = G_ADD {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s8) @@ -136,6 +137,7 @@ body: | %1(s16) = COPY %r1 %2(s16) = G_ADD %0, %1 ; G_ADD with s16 should widen + ; CHECK-NOT: {{%[0-9]+}}(s16) = G_ADD {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_ADD {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s16) = G_ADD {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s16) @@ -187,6 +189,7 @@ body: | %1(s8) = COPY %r1 %2(s8) = G_SUB %0, %1 ; G_SUB with s8 should widen + ; CHECK-NOT: {{%[0-9]+}}(s8) = G_SUB {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_SUB {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s8) = G_SUB {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s8) @@ -212,6 +215,7 @@ body: | %1(s16) = COPY %r1 %2(s16) = G_SUB %0, %1 ; G_SUB with s16 should widen + ; CHECK-NOT: {{%[0-9]+}}(s16) = G_SUB {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_SUB {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s16) = G_SUB {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s16) @@ -263,6 +267,7 @@ body: | %1(s8) = COPY %r1 %2(s8) = G_MUL %0, %1 ; G_MUL with s8 should widen + ; CHECK-NOT: {{%[0-9]+}}(s8) = G_MUL {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_MUL {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s8) = G_MUL {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s8) @@ -288,6 +293,7 @@ body: | %1(s16) = COPY %r1 %2(s16) = G_MUL %0, %1 ; G_MUL with s16 should widen + ; CHECK-NOT: {{%[0-9]+}}(s16) = G_MUL {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_MUL {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s16) = G_MUL {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s16) @@ -339,6 +345,7 @@ body: | %1(s8) = COPY %r1 %2(s8) = G_AND %0, %1 ; G_AND with s8 should widen + ; CHECK-NOT: {{%[0-9]+}}(s8) = G_AND {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_AND {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s8) = G_AND {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s8) @@ -364,6 +371,7 @@ body: | %1(s16) = COPY %r1 %2(s16) = G_AND %0, %1 ; G_AND with s16 should widen + ; CHECK-NOT: {{%[0-9]+}}(s16) = G_AND {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_AND {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s16) = G_AND {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s16) @@ -415,6 +423,7 @@ body: | %1(s8) = COPY %r1 %2(s8) = G_OR %0, %1 ; G_OR with s8 should widen + ; CHECK-NOT: {{%[0-9]+}}(s8) = G_OR {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_OR {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s8) = G_OR {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s8) @@ -440,6 +449,7 @@ body: | %1(s16) = COPY %r1 %2(s16) = G_OR %0, %1 ; G_OR with s16 should widen + ; CHECK-NOT: {{%[0-9]+}}(s16) = G_OR {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_OR {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s16) = G_OR {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s16) @@ -491,6 +501,7 @@ body: | %1(s8) = COPY %r1 %2(s8) = G_XOR %0, %1 ; G_XOR with s8 should widen + ; CHECK-NOT: {{%[0-9]+}}(s8) = G_XOR {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_XOR {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s8) = G_XOR {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s8) @@ -516,6 +527,7 @@ body: | %1(s16) = COPY %r1 %2(s16) = G_XOR %0, %1 ; G_XOR with s16 should widen + ; CHECK-NOT: {{%[0-9]+}}(s16) = G_XOR {{%[0-9]+, %[0-9]+}} ; CHECK: {{%[0-9]+}}(s32) = G_XOR {{%[0-9]+, %[0-9]+}} ; CHECK-NOT: {{%[0-9]+}}(s16) = G_XOR {{%[0-9]+, %[0-9]+}} %r0 = COPY %2(s16) @@ -698,16 +710,22 @@ body: | ; CHECK: {{%[0-9]+}}(s32) = G_CONSTANT 42 %1(s16) = G_CONSTANT i16 21 + ; CHECK-NOT: G_CONSTANT i16 ; CHECK: [[EXT:%[0-9]+]](s32) = G_CONSTANT i32 21 ; CHECK: {{%[0-9]+}}(s16) = G_TRUNC [[EXT]](s32) + ; CHECK-NOT: G_CONSTANT i16 %2(s8) = G_CONSTANT i8 10 + ; CHECK-NOT: G_CONSTANT i8 ; CHECK: [[EXT:%[0-9]+]](s32) = G_CONSTANT i32 10 ; CHECK: {{%[0-9]+}}(s8) = G_TRUNC [[EXT]](s32) + ; CHECK-NOT: G_CONSTANT i8 %3(s1) = G_CONSTANT i1 1 + ; CHECK-NOT: G_CONSTANT i1 ; CHECK: [[EXT:%[0-9]+]](s32) = G_CONSTANT i32 -1 ; CHECK: {{%[0-9]+}}(s1) = G_TRUNC [[EXT]](s32) + ; CHECK-NOT: G_CONSTANT i1 %r0 = COPY %0(s32) BX_RET 14, _, implicit %r0 -- 2.40.0