summaryrefslogtreecommitdiff
path: root/test/Transforms/SLPVectorizer/X86
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2015-08-07 23:01:33 +0000
committerDimitry Andric <dim@FreeBSD.org>2015-08-07 23:01:33 +0000
commitee8648bdac07986a0f1ec897b02ec82a2f144d46 (patch)
tree52d1861acda1205241ee35a94aa63129c604d469 /test/Transforms/SLPVectorizer/X86
parent1a82d4c088707c791c792f6822f611b47a12bdfe (diff)
Diffstat (limited to 'test/Transforms/SLPVectorizer/X86')
-rw-r--r--test/Transforms/SLPVectorizer/X86/cse.ll31
-rw-r--r--test/Transforms/SLPVectorizer/X86/gep.ll1
-rw-r--r--test/Transforms/SLPVectorizer/X86/loopinvariant.ll18
-rw-r--r--test/Transforms/SLPVectorizer/X86/pr19657.ll102
4 files changed, 60 insertions, 92 deletions
diff --git a/test/Transforms/SLPVectorizer/X86/cse.ll b/test/Transforms/SLPVectorizer/X86/cse.ll
index 9f56e2195991..8d25b3661dc3 100644
--- a/test/Transforms/SLPVectorizer/X86/cse.ll
+++ b/test/Transforms/SLPVectorizer/X86/cse.ll
@@ -12,11 +12,8 @@ target triple = "i386-apple-macosx10.8.0"
;CHECK-LABEL: @test(
;CHECK: load <2 x double>
-;CHECK: fadd <2 x double>
-;CHECK: store <2 x double>
-;CHECK: insertelement <2 x double>
-;CHECK: fadd <2 x double>
-;CHECK: store <2 x double>
+;CHECK: fadd <4 x double>
+;CHECK: store <4 x double>
;CHECK: ret i32
define i32 @test(double* nocapture %G) {
@@ -48,11 +45,12 @@ entry:
; A[2] = A[2] * 7.6 * n + 3.0;
; A[3] = A[3] * 7.4 * n + 4.0;
;}
-;CHECK-LABEL: @foo(
-;CHECK: insertelement <2 x double>
-;CHECK: insertelement <2 x double>
-;CHECK-NOT: insertelement <2 x double>
-;CHECK: ret
+; CHECK-LABEL: @foo(
+; CHECK: load <4 x double>
+; CHECK: fmul <4 x double>
+; CHECK: fmul <4 x double>
+; CHECK: fadd <4 x double>
+; CHECK: store <4 x double>
define i32 @foo(double* nocapture %A, i32 %n) {
entry:
%0 = load double, double* %A, align 8
@@ -93,7 +91,7 @@ entry:
; }
; We can't merge the gather sequences because one does not dominate the other.
-; CHECK: test2
+; CHECK-LABEL: @test2(
; CHECK: insertelement
; CHECK: insertelement
; CHECK: insertelement
@@ -140,11 +138,12 @@ define i32 @test2(double* nocapture %G, i32 %k) {
; A[2] = A[2] * 7.9 * n + 6.0;
; A[3] = A[3] * 7.9 * n + 6.0;
;}
-;CHECK-LABEL: @foo4(
-;CHECK: insertelement <2 x double>
-;CHECK: insertelement <2 x double>
-;CHECK-NOT: insertelement <2 x double>
-;CHECK: ret
+; CHECK-LABEL: @foo4(
+; CHECK: load <4 x double>
+; CHECK: fmul <4 x double>
+; CHECK: fmul <4 x double>
+; CHECK: fadd <4 x double>
+; CHECK: store <4 x double>
define i32 @foo4(double* nocapture %A, i32 %n) {
entry:
%0 = load double, double* %A, align 8
diff --git a/test/Transforms/SLPVectorizer/X86/gep.ll b/test/Transforms/SLPVectorizer/X86/gep.ll
index 3f952d7b242b..d10f2b6015d4 100644
--- a/test/Transforms/SLPVectorizer/X86/gep.ll
+++ b/test/Transforms/SLPVectorizer/X86/gep.ll
@@ -1,5 +1,6 @@
; RUN: opt < %s -basicaa -slp-vectorizer -S |FileCheck %s
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-unknown"
; Test if SLP can handle GEP expressions.
; The test perform the following action:
diff --git a/test/Transforms/SLPVectorizer/X86/loopinvariant.ll b/test/Transforms/SLPVectorizer/X86/loopinvariant.ll
index 0c16c34a1888..dace4b35b871 100644
--- a/test/Transforms/SLPVectorizer/X86/loopinvariant.ll
+++ b/test/Transforms/SLPVectorizer/X86/loopinvariant.ll
@@ -1,22 +1,19 @@
-; RUN: opt < %s -basicaa -slp-vectorizer -dce -S -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck %s
+; RUN: opt < %s -basicaa -slp-vectorizer -S -mcpu=corei7-avx | FileCheck %s
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-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.8.0"
;CHECK-LABEL: @foo(
-;CHECK: load <4 x i32>
-;CHECK: add nsw <4 x i32>
-;CHECK: store <4 x i32>
-;CHECK: load <4 x i32>
-;CHECK: add nsw <4 x i32>
-;CHECK: store <4 x i32>
+;CHECK: load <8 x i32>
+;CHECK: add nsw <8 x i32>
+;CHECK: store <8 x i32>
;CHECK: ret
-define i32 @foo(i32* nocapture %A, i32 %n) #0 {
+define i32 @foo(i32* nocapture %A, i32 %n) {
entry:
%cmp62 = icmp sgt i32 %n, 0
br i1 %cmp62, label %for.body, label %for.end
-for.body: ; preds = %entry, %for.body
+for.body:
%indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
%arrayidx = getelementptr inbounds i32, i32* %A, i64 %indvars.iv
%0 = load i32, i32* %arrayidx, align 4
@@ -62,8 +59,7 @@ for.body: ; preds = %entry, %for.body
%cmp = icmp slt i32 %15, %n
br i1 %cmp, label %for.body, label %for.end
-for.end: ; preds = %for.body, %entry
+for.end:
ret i32 undef
}
-attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
diff --git a/test/Transforms/SLPVectorizer/X86/pr19657.ll b/test/Transforms/SLPVectorizer/X86/pr19657.ll
index a687aec76103..32f8da4c7ee0 100644
--- a/test/Transforms/SLPVectorizer/X86/pr19657.ll
+++ b/test/Transforms/SLPVectorizer/X86/pr19657.ll
@@ -1,73 +1,45 @@
-; RUN: opt < %s -O1 -basicaa -slp-vectorizer -dce -S -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7-avx | FileCheck %s
+; RUN: opt < %s -basicaa -slp-vectorizer -S -mcpu=corei7-avx | FileCheck %s
+; RUN: opt < %s -basicaa -slp-vectorizer -slp-max-reg-size=128 -S -mcpu=corei7-avx | FileCheck %s --check-prefix=V128
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
-;CHECK: load <2 x double>, <2 x double>*
-;CHECK: fadd <2 x double>
-;CHECK: store <2 x double>
+; CHECK-LABEL: @foo(
+; CHECK: load <4 x double>
+; CHECK: fadd <4 x double>
+; CHECK: fadd <4 x double>
+; CHECK: store <4 x double>
-; Function Attrs: nounwind uwtable
-define void @foo(double* %x) #0 {
- %1 = alloca double*, align 8
- store double* %x, double** %1, align 8
- %2 = load double*, double** %1, align 8
- %3 = getelementptr inbounds double, double* %2, i64 0
- %4 = load double, double* %3, align 8
- %5 = load double*, double** %1, align 8
- %6 = getelementptr inbounds double, double* %5, i64 0
- %7 = load double, double* %6, align 8
- %8 = fadd double %4, %7
- %9 = load double*, double** %1, align 8
- %10 = getelementptr inbounds double, double* %9, i64 0
- %11 = load double, double* %10, align 8
- %12 = fadd double %8, %11
- %13 = load double*, double** %1, align 8
- %14 = getelementptr inbounds double, double* %13, i64 0
- store double %12, double* %14, align 8
- %15 = load double*, double** %1, align 8
- %16 = getelementptr inbounds double, double* %15, i64 1
- %17 = load double, double* %16, align 8
- %18 = load double*, double** %1, align 8
- %19 = getelementptr inbounds double, double* %18, i64 1
- %20 = load double, double* %19, align 8
- %21 = fadd double %17, %20
- %22 = load double*, double** %1, align 8
- %23 = getelementptr inbounds double, double* %22, i64 1
- %24 = load double, double* %23, align 8
- %25 = fadd double %21, %24
- %26 = load double*, double** %1, align 8
- %27 = getelementptr inbounds double, double* %26, i64 1
- store double %25, double* %27, align 8
- %28 = load double*, double** %1, align 8
- %29 = getelementptr inbounds double, double* %28, i64 2
- %30 = load double, double* %29, align 8
- %31 = load double*, double** %1, align 8
- %32 = getelementptr inbounds double, double* %31, i64 2
- %33 = load double, double* %32, align 8
- %34 = fadd double %30, %33
- %35 = load double*, double** %1, align 8
- %36 = getelementptr inbounds double, double* %35, i64 2
- %37 = load double, double* %36, align 8
- %38 = fadd double %34, %37
- %39 = load double*, double** %1, align 8
- %40 = getelementptr inbounds double, double* %39, i64 2
- store double %38, double* %40, align 8
- %41 = load double*, double** %1, align 8
- %42 = getelementptr inbounds double, double* %41, i64 3
- %43 = load double, double* %42, align 8
- %44 = load double*, double** %1, align 8
- %45 = getelementptr inbounds double, double* %44, i64 3
- %46 = load double, double* %45, align 8
- %47 = fadd double %43, %46
- %48 = load double*, double** %1, align 8
- %49 = getelementptr inbounds double, double* %48, i64 3
- %50 = load double, double* %49, align 8
- %51 = fadd double %47, %50
- %52 = load double*, double** %1, align 8
- %53 = getelementptr inbounds double, double* %52, i64 3
- store double %51, double* %53, align 8
+; V128-LABEL: @foo(
+; V128: load <2 x double>
+; V128: fadd <2 x double>
+; V128: fadd <2 x double>
+; V128: store <2 x double>
+; V128: load <2 x double>
+; V128: fadd <2 x double>
+; V128: fadd <2 x double>
+; V128: store <2 x double>
+
+define void @foo(double* %x) {
+ %1 = load double, double* %x, align 8
+ %2 = fadd double %1, %1
+ %3 = fadd double %2, %1
+ store double %3, double* %x, align 8
+ %4 = getelementptr inbounds double, double* %x, i64 1
+ %5 = load double, double* %4, align 8
+ %6 = fadd double %5, %5
+ %7 = fadd double %6, %5
+ store double %7, double* %4, align 8
+ %8 = getelementptr inbounds double, double* %x, i64 2
+ %9 = load double, double* %8, align 8
+ %10 = fadd double %9, %9
+ %11 = fadd double %10, %9
+ store double %11, double* %8, align 8
+ %12 = getelementptr inbounds double, double* %x, i64 3
+ %13 = load double, double* %12, align 8
+ %14 = fadd double %13, %13
+ %15 = fadd double %14, %13
+ store double %15, double* %12, align 8
ret void
}
-attributes #0 = { nounwind }