[llvm] r299761 - [ARM] GlobalISel: Test hard float properly

Diana Picus via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 7 05:04:25 PDT 2017


Author: rovka
Date: Fri Apr  7 07:04:24 2017
New Revision: 299761

URL: http://llvm.org/viewvc/llvm-project?rev=299761&view=rev
Log:
[ARM] GlobalISel: Test hard float properly

It turns out -float-abi=hard doesn't set the hard float calling
convention for libcalls. We need to use a hard float triple instead
(e.g. gnueabihf).

Modified:
    llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir

Modified: llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir?rev=299761&r1=299760&r2=299761&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir (original)
+++ llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-fp.mir Fri Apr  7 07:04:24 2017
@@ -1,6 +1,6 @@
-# RUN: llc -mtriple arm-- -mattr=+vfp2 -float-abi=hard -global-isel -run-pass=legalizer %s -o - | FileCheck %s
-# RUN: llc -mtriple arm-- -mattr=+vfp2 -float-abi=soft -global-isel -run-pass=legalizer %s -o - | FileCheck %s
-# RUN: llc -mtriple arm-- -float-abi=soft -global-isel -run-pass=legalizer %s -o - | FileCheck %s
+# RUN: llc -mtriple arm-gnueabihf -mattr=+vfp2 -float-abi=hard -global-isel -run-pass=legalizer %s -o - | FileCheck %s -check-prefix CHECK -check-prefix HARD
+# RUN: llc -mtriple arm-- -mattr=+vfp2 -float-abi=soft -global-isel -run-pass=legalizer %s -o - | FileCheck %s -check-prefix CHECK -check-prefix SOFT
+# RUN: llc -mtriple arm-- -float-abi=soft -global-isel -run-pass=legalizer %s -o - | FileCheck %s  -check-prefix CHECK -check-prefix SOFT
 --- |
   define void @test_frem_float() { ret void }
   define void @test_frem_double() { ret void }
@@ -26,10 +26,14 @@ body:             |
     %0(s32) = COPY %r0
     %1(s32) = COPY %r1
     ; CHECK: ADJCALLSTACKDOWN
-    ; CHECK-DAG: %r0 = COPY [[X]]
-    ; CHECK-DAG: %r1 = COPY [[Y]]
-    ; CHECK: BLX $fmodf, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0
-    ; CHECK: [[R:%[0-9]+]](s32) = COPY %r0
+    ; SOFT-DAG: %r0 = COPY [[X]]
+    ; SOFT-DAG: %r1 = COPY [[Y]]
+    ; HARD-DAG: %s0 = COPY [[X]]
+    ; HARD-DAG: %s1 = COPY [[Y]]
+    ; SOFT: BLX $fmodf, {{.*}}, implicit %r0, implicit %r1, implicit-def %r0
+    ; HARD: BLX $fmodf, {{.*}}, implicit %s0, implicit %s1, implicit-def %s0
+    ; SOFT: [[R:%[0-9]+]](s32) = COPY %r0
+    ; HARD: [[R:%[0-9]+]](s32) = COPY %s0
     ; CHECK: ADJCALLSTACKUP
     %2(s32) = G_FREM %0, %1
     ; CHECK: %r0 = COPY [[R]]
@@ -59,10 +63,11 @@ body:             |
     liveins: %r0, %r1, %r2, %r3
 
     ; The inputs may be in the wrong order (depending on the target's
-    ; endianness), but that's orthogonal to what we're trying to test here. We
-    ; only need to check that the first value, received through R0-R1, ends up
-    ; in R0-R1 or R1-R0, and the second value, received through R2-R3, ends up
-    ; in R2-R3 or R3-R2, when passed to fmod.
+    ; endianness), but that's orthogonal to what we're trying to test here.
+    ; For soft float, we only need to check that the first value, received
+    ; through R0-R1, ends up in R0-R1 or R1-R0, and the second value, received
+    ; through R2-R3, ends up in R2-R3 or R3-R2, when passed to fmod.
+    ; For hard float, the values need to end up in D0 and D1.
     ; CHECK-DAG: [[X0:%[0-9]+]](s32) = COPY %r0
     ; CHECK-DAG: [[X1:%[0-9]+]](s32) = COPY %r1
     ; CHECK-DAG: [[Y0:%[0-9]+]](s32) = COPY %r2
@@ -71,14 +76,19 @@ body:             |
     %1(s32) = COPY %r1
     %2(s32) = COPY %r2
     %3(s32) = COPY %r3
+    ; HARD-DAG: [[X:%[0-9]+]](s64) = G_SEQUENCE [[X0]]
+    ; HARD-DAG: [[Y:%[0-9]+]](s64) = G_SEQUENCE [[Y0]]
     %4(s64) = G_SEQUENCE %0(s32), 0, %1(s32), 32
     %5(s64) = G_SEQUENCE %2(s32), 0, %3(s32), 32
     ; CHECK: ADJCALLSTACKDOWN
-    ; CHECK-DAG: %r{{[0-1]}} = COPY [[X0]]
-    ; CHECK-DAG: %r{{[0-1]}} = COPY [[X1]]
-    ; CHECK-DAG: %r{{[2-3]}} = COPY [[Y0]]
-    ; CHECK-DAG: %r{{[2-3]}} = COPY [[Y1]]
-    ; CHECK: BLX $fmod, {{.*}}, implicit %r0, implicit %r1, implicit %r2, implicit %r3, implicit-def %r0, implicit-def %r1
+    ; SOFT-DAG: %r{{[0-1]}} = COPY [[X0]]
+    ; SOFT-DAG: %r{{[0-1]}} = COPY [[X1]]
+    ; SOFT-DAG: %r{{[2-3]}} = COPY [[Y0]]
+    ; SOFT-DAG: %r{{[2-3]}} = COPY [[Y1]]
+    ; HARD-DAG: %d0 = COPY [[X]]
+    ; HARD-DAG: %d1 = COPY [[Y]]
+    ; 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
     %6(s64) = G_FREM %4, %5
     %7(s32) = G_EXTRACT %6(s64), 0




More information about the llvm-commits mailing list