[llvm] r266603 - [ARM] AArch32 v8 NEON is still not IEEE-754 compliant

Renato Golin via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 18 05:06:53 PDT 2016


Author: rengolin
Date: Mon Apr 18 07:06:47 2016
New Revision: 266603

URL: http://llvm.org/viewvc/llvm-project?rev=266603&view=rev
Log:
[ARM] AArch32 v8 NEON is still not IEEE-754 compliant

Modified:
    llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.h
    llvm/trunk/test/Transforms/LoopVectorize/ARM/arm-ieee-vectorize.ll

Modified: llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.h?rev=266603&r1=266602&r2=266603&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.h (original)
+++ llvm/trunk/lib/Target/ARM/ARMTargetTransformInfo.h Mon Apr 18 07:06:47 2016
@@ -54,8 +54,11 @@ public:
 
   bool enableInterleavedAccessVectorization() { return true; }
 
+  /// Floating-point computation using ARMv8 AArch32 Advanced
+  /// SIMD instructions remains unchanged from ARMv7. Only AArch64 SIMD
+  /// is IEEE-754 compliant, but it's not covered in this target.
   bool isFPVectorizationPotentiallyUnsafe() {
-    return !ST->hasFPARMv8() && !ST->isTargetDarwin();
+    return !ST->isTargetDarwin();
   }
 
   /// \name Scalar TTI Implementations

Modified: llvm/trunk/test/Transforms/LoopVectorize/ARM/arm-ieee-vectorize.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/ARM/arm-ieee-vectorize.ll?rev=266603&r1=266602&r2=266603&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/LoopVectorize/ARM/arm-ieee-vectorize.ll (original)
+++ llvm/trunk/test/Transforms/LoopVectorize/ARM/arm-ieee-vectorize.ll Mon Apr 18 07:06:47 2016
@@ -1,5 +1,5 @@
-; RUN: opt -mtriple armv7-linux-gnueabihf -loop-vectorize -S %s -debug-only=loop-vectorize -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=LINUX-V7
-; RUN: opt -mtriple armv8-linux-gnu -loop-vectorize -S %s -debug-only=loop-vectorize -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=LINUX-V8
+; RUN: opt -mtriple armv7-linux-gnueabihf -loop-vectorize -S %s -debug-only=loop-vectorize -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=LINUX
+; RUN: opt -mtriple armv8-linux-gnu -loop-vectorize -S %s -debug-only=loop-vectorize -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=LINUX
 ; RUN: opt -mtriple armv7-unknwon-darwin -loop-vectorize -S %s -debug-only=loop-vectorize -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=DARWIN
 ; REQUIRES: asserts
 
@@ -42,10 +42,8 @@ for.end:
 }
 
 ; Floating-point loops need fast-math to be vectorizeable
-; LINUX-V7: Checking a loop in "sumf"
-; LINUX-V7: Potentially unsafe FP op prevents vectorization
-; LINUX-V8: Checking a loop in "sumf"
-; LINUX-V8: We can vectorize this loop!
+; LINUX: Checking a loop in "sumf"
+; LINUX: Potentially unsafe FP op prevents vectorization
 ; DARWIN: Checking a loop in "sumf"
 ; DARWIN: We can vectorize this loop!
 define void @sumf(float* noalias nocapture readonly %A, float* noalias nocapture readonly %B, float* noalias nocapture %C, i32 %N) {
@@ -110,10 +108,8 @@ for.end:
 }
 
 ; Floating-point loops need fast-math to be vectorizeable
-; LINUX-V7: Checking a loop in "redf"
-; LINUX-V7: Potentially unsafe FP op prevents vectorization
-; LINUX-V8: Checking a loop in "redf"
-; LINUX-V8: We can vectorize this loop!
+; LINUX: Checking a loop in "redf"
+; LINUX: Potentially unsafe FP op prevents vectorization
 ; DARWIN: Checking a loop in "redf"
 ; DARWIN: We can vectorize this loop!
 define float @redf(float* noalias nocapture readonly %a, float* noalias nocapture readonly %b, i32 %N) {
@@ -147,10 +143,8 @@ for.end:
 }
 
 ; Make sure calls that turn into builtins are also covered
-; LINUX-V7: Checking a loop in "fabs"
-; LINUX-V7: Potentially unsafe FP op prevents vectorization
-; LINUX-V8: Checking a loop in "fabs"
-; LINUX-V8: We can vectorize this loop!
+; LINUX: Checking a loop in "fabs"
+; LINUX: Potentially unsafe FP op prevents vectorization
 ; DARWIN: Checking a loop in "fabs"
 ; DARWIN: We can vectorize this loop!
 define void @fabs(float* noalias nocapture readonly %A, float* noalias nocapture readonly %B, float* noalias nocapture %C, i32 %N) {




More information about the llvm-commits mailing list