diff options
| author | Diana Picus <diana.picus@linaro.org> | 2018-01-30 07:54:52 +0000 |
|---|---|---|
| committer | Diana Picus <diana.picus@linaro.org> | 2018-01-30 07:54:52 +0000 |
| commit | 4ed0ee7b5f6e209cd39506980869620eabff7aad (patch) | |
| tree | ce7818f575e4f697e618b0720fbd54ce9e42a5d8 /llvm/test | |
| parent | cf47b046f90b12e1656d03f5afcb4e93d2d6b886 (diff) | |
| download | bcm5719-llvm-4ed0ee7b5f6e209cd39506980869620eabff7aad.tar.gz bcm5719-llvm-4ed0ee7b5f6e209cd39506980869620eabff7aad.zip | |
[ARM GlobalISel] Legalize G_FPTOSI and G_FPTOUI
Legal if we have hardware support for floating point, libcalls
otherwise.
Also add the necessary support for libcalls in the legalizer helper.
llvm-svn: 323726
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir b/llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir index 297eb6f28f6..152cb81d749 100644 --- a/llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir +++ b/llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir @@ -29,6 +29,11 @@ define void @test_fpext_float_to_double() { ret void } define void @test_fptrunc_double_to_float() { ret void } + define void @test_fptosi_float() { ret void } + define void @test_fptosi_double() { ret void } + define void @test_fptoui_float() { ret void } + define void @test_fptoui_double() { ret void } + define void @test_fcmp_true_s32() { ret void } define void @test_fcmp_false_s32() { ret void } @@ -812,6 +817,144 @@ body: | %r0 = COPY %3(s32) BX_RET 14, %noreg, implicit %r0 --- +--- +name: test_fptosi_float +# CHECK-LABEL: name: test_fptosi_float +legalized: false +# CHECK: legalized: true +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } +body: | + bb.0: + liveins: %r0 + + ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY %r0 + %0(s32) = COPY %r0 + ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTOSI [[X]] + ; SOFT-NOT: G_FPTOSI + ; SOFT: ADJCALLSTACKDOWN + ; SOFT-DAG: %r0 = COPY [[X]] + ; SOFT-AEABI: BL &__aeabi_f2iz, {{.*}}, implicit %r0, implicit-def %r0 + ; SOFT-DEFAULT: BL &__fixsfsi, {{.*}}, implicit %r0, implicit-def %r0 + ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY %r0 + ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_FPTOSI + %1(s32) = G_FPTOSI %0(s32) + ; CHECK: %r0 = COPY [[R]] + %r0 = COPY %1(s32) + BX_RET 14, %noreg, implicit %r0 +... +--- +name: test_fptosi_double +# CHECK-LABEL: name: test_fptosi_double +legalized: false +# CHECK: legalized: true +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } + - { id: 2, class: _ } + - { id: 3, class: _ } +body: | + bb.0: + liveins: %r0, %r1 + + ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY %r0 + ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY %r1 + %0(s32) = COPY %r0 + %1(s32) = COPY %r1 + ; HARD: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]] + %2(s64) = G_MERGE_VALUES %0(s32), %1(s32) + ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTOSI [[X]] + ; SOFT-NOT: G_FPTOSI + ; SOFT: ADJCALLSTACKDOWN + ; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]] + ; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]] + ; SOFT-AEABI: BL &__aeabi_d2iz, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 + ; SOFT-DEFAULT: BL &__fixdfsi, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 + ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY %r0 + ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_FPTOSI + %3(s32) = G_FPTOSI %2(s64) + ; CHECK: %r0 = COPY [[R]](s32) + %r0 = COPY %3(s32) + BX_RET 14, %noreg, implicit %r0 +... +--- +name: test_fptoui_float +# CHECK-LABEL: name: test_fptoui_float +legalized: false +# CHECK: legalized: true +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } +body: | + bb.0: + liveins: %r0 + + ; CHECK-DAG: [[X:%[0-9]+]]:_(s32) = COPY %r0 + %0(s32) = COPY %r0 + ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTOUI [[X]] + ; SOFT-NOT: G_FPTOUI + ; SOFT: ADJCALLSTACKDOWN + ; SOFT-DAG: %r0 = COPY [[X]] + ; SOFT-AEABI: BL &__aeabi_f2uiz, {{.*}}, implicit %r0, implicit-def %r0 + ; SOFT-DEFAULT: BL &__fixunssfsi, {{.*}}, implicit %r0, implicit-def %r0 + ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY %r0 + ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_FPTOUI + %1(s32) = G_FPTOUI %0(s32) + ; CHECK: %r0 = COPY [[R]] + %r0 = COPY %1(s32) + BX_RET 14, %noreg, implicit %r0 +... +--- +name: test_fptoui_double +# CHECK-LABEL: name: test_fptoui_double +legalized: false +# CHECK: legalized: true +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } + - { id: 2, class: _ } + - { id: 3, class: _ } +body: | + bb.0: + liveins: %r0, %r1 + + ; CHECK-DAG: [[X0:%[0-9]+]]:_(s32) = COPY %r0 + ; CHECK-DAG: [[X1:%[0-9]+]]:_(s32) = COPY %r1 + %0(s32) = COPY %r0 + %1(s32) = COPY %r1 + ; HARD: [[X:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[X0]] + %2(s64) = G_MERGE_VALUES %0(s32), %1(s32) + ; HARD: [[R:%[0-9]+]]:_(s32) = G_FPTOUI [[X]] + ; SOFT-NOT: G_FPTOUI + ; SOFT: ADJCALLSTACKDOWN + ; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]] + ; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]] + ; SOFT-AEABI: BL &__aeabi_d2uiz, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 + ; SOFT-DEFAULT: BL &__fixunsdfsi, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0 + ; SOFT: [[R:%[0-9]+]]:_(s32) = COPY %r0 + ; SOFT: ADJCALLSTACKUP + ; SOFT-NOT: G_FPTOUI + %3(s32) = G_FPTOUI %2(s64) + ; CHECK: %r0 = COPY [[R]](s32) + %r0 = COPY %3(s32) + BX_RET 14, %noreg, implicit %r0 +... ... name: test_fcmp_true_s32 # CHECK-LABEL: name: test_fcmp_true_s32 |

