summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDiana Picus <diana.picus@linaro.org>2018-01-30 07:54:52 +0000
committerDiana Picus <diana.picus@linaro.org>2018-01-30 07:54:52 +0000
commit4ed0ee7b5f6e209cd39506980869620eabff7aad (patch)
treece7818f575e4f697e618b0720fbd54ce9e42a5d8 /llvm/test
parentcf47b046f90b12e1656d03f5afcb4e93d2d6b886 (diff)
downloadbcm5719-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.mir143
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
OpenPOWER on IntegriCloud