[llvm-commits] [llvm] r155729 - in /llvm/trunk: lib/Transforms/Vectorize/BBVectorize.cpp test/Transforms/BBVectorize/simple-tst.ll

Hal Finkel hfinkel at anl.gov
Fri Apr 27 12:34:00 PDT 2012


Author: hfinkel
Date: Fri Apr 27 14:34:00 2012
New Revision: 155729

URL: http://llvm.org/viewvc/llvm-project?rev=155729&view=rev
Log:
Don't vectorize target-specific types (ppc_fp128, x86_fp80, etc.).

Target specific types should not be vectorized. As a practical matter,
these types are already register matched (at least in the x86 case),
and codegen does not always work correctly (at least in the ppc case,
and this is not worth fixing because ppc_fp128 is currently broken and
will probably go away soon).

Added:
    llvm/trunk/test/Transforms/BBVectorize/simple-tst.ll
Modified:
    llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp

Modified: llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp?rev=155729&r1=155728&r2=155729&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp (original)
+++ llvm/trunk/lib/Transforms/Vectorize/BBVectorize.cpp Fri Apr 27 14:34:00 2012
@@ -612,6 +612,12 @@
         && (T1->isFPOrFPVectorTy() || T2->isFPOrFPVectorTy()))
       return false;
 
+    // Don't vectorize target-specific types.
+    if (T1->isX86_FP80Ty() || T1->isPPC_FP128Ty() || T1->isX86_MMXTy())
+      return false;
+    if (T2->isX86_FP80Ty() || T2->isPPC_FP128Ty() || T2->isX86_MMXTy())
+      return false;
+
     if ((!Config.VectorizePointers || TD == 0) &&
         (T1->getScalarType()->isPointerTy() ||
          T2->getScalarType()->isPointerTy()))

Added: llvm/trunk/test/Transforms/BBVectorize/simple-tst.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/BBVectorize/simple-tst.ll?rev=155729&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/BBVectorize/simple-tst.ll (added)
+++ llvm/trunk/test/Transforms/BBVectorize/simple-tst.ll Fri Apr 27 14:34:00 2012
@@ -0,0 +1,18 @@
+target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"
+target triple = "powerpc64-unknown-linux"
+; RUN: opt < %s -bb-vectorize -bb-vectorize-req-chain-depth=3 -bb-vectorize-vector-bits=256 -instcombine -gvn -S | FileCheck %s
+
+; Basic depth-3 chain (target-specific type should not vectorize)
+define ppc_fp128 @test7(ppc_fp128 %A1, ppc_fp128 %A2, ppc_fp128 %B1, ppc_fp128 %B2) {
+; CHECK: @test7
+; CHECK-NOT: <2 x ppc_fp128>
+	%X1 = fsub ppc_fp128 %A1, %B1
+	%X2 = fsub ppc_fp128 %A2, %B2
+	%Y1 = fmul ppc_fp128 %X1, %A1
+	%Y2 = fmul ppc_fp128 %X2, %A2
+	%Z1 = fadd ppc_fp128 %Y1, %B1
+	%Z2 = fadd ppc_fp128 %Y2, %B2
+	%R  = fmul ppc_fp128 %Z1, %Z2
+	ret ppc_fp128 %R
+}
+





More information about the llvm-commits mailing list