[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / Transforms / SLPVectorizer / X86 / odd_store.ll
blob4f72ddb35c100525a4fd22aaa92e2ab1b3690a84
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -basic-aa -slp-vectorizer -dce -S -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck %s
4 ;int foo(char * restrict A, float * restrict B, float T) {
5 ;  A[0] = (T * B[10] + 4.0);
6 ;  A[1] = (T * B[11] + 5.0);
7 ;  A[2] = (T * B[12] + 6.0);
8 ;}
10 define i32 @foo(i8* noalias nocapture %A, float* noalias nocapture %B, float %T) {
11 ; CHECK-LABEL: @foo(
12 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds float, float* [[B:%.*]], i64 10
13 ; CHECK-NEXT:    [[TMP2:%.*]] = load float, float* [[TMP1]], align 4
14 ; CHECK-NEXT:    [[TMP3:%.*]] = fmul float [[TMP2]], [[T:%.*]]
15 ; CHECK-NEXT:    [[TMP4:%.*]] = fpext float [[TMP3]] to double
16 ; CHECK-NEXT:    [[TMP5:%.*]] = fadd double [[TMP4]], 4.000000e+00
17 ; CHECK-NEXT:    [[TMP6:%.*]] = fptosi double [[TMP5]] to i8
18 ; CHECK-NEXT:    store i8 [[TMP6]], i8* [[A:%.*]], align 1
19 ; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr inbounds float, float* [[B]], i64 11
20 ; CHECK-NEXT:    [[TMP8:%.*]] = load float, float* [[TMP7]], align 4
21 ; CHECK-NEXT:    [[TMP9:%.*]] = fmul float [[TMP8]], [[T]]
22 ; CHECK-NEXT:    [[TMP10:%.*]] = fpext float [[TMP9]] to double
23 ; CHECK-NEXT:    [[TMP11:%.*]] = fadd double [[TMP10]], 5.000000e+00
24 ; CHECK-NEXT:    [[TMP12:%.*]] = fptosi double [[TMP11]] to i8
25 ; CHECK-NEXT:    [[TMP13:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 1
26 ; CHECK-NEXT:    store i8 [[TMP12]], i8* [[TMP13]], align 1
27 ; CHECK-NEXT:    [[TMP14:%.*]] = getelementptr inbounds float, float* [[B]], i64 12
28 ; CHECK-NEXT:    [[TMP15:%.*]] = load float, float* [[TMP14]], align 4
29 ; CHECK-NEXT:    [[TMP16:%.*]] = fmul float [[TMP15]], [[T]]
30 ; CHECK-NEXT:    [[TMP17:%.*]] = fpext float [[TMP16]] to double
31 ; CHECK-NEXT:    [[TMP18:%.*]] = fadd double [[TMP17]], 6.000000e+00
32 ; CHECK-NEXT:    [[TMP19:%.*]] = fptosi double [[TMP18]] to i8
33 ; CHECK-NEXT:    [[TMP20:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 2
34 ; CHECK-NEXT:    store i8 [[TMP19]], i8* [[TMP20]], align 1
35 ; CHECK-NEXT:    ret i32 undef
37   %1 = getelementptr inbounds float, float* %B, i64 10
38   %2 = load float, float* %1, align 4
39   %3 = fmul float %2, %T
40   %4 = fpext float %3 to double
41   %5 = fadd double %4, 4.000000e+00
42   %6 = fptosi double %5 to i8
43   store i8 %6, i8* %A, align 1
44   %7 = getelementptr inbounds float, float* %B, i64 11
45   %8 = load float, float* %7, align 4
46   %9 = fmul float %8, %T
47   %10 = fpext float %9 to double
48   %11 = fadd double %10, 5.000000e+00
49   %12 = fptosi double %11 to i8
50   %13 = getelementptr inbounds i8, i8* %A, i64 1
51   store i8 %12, i8* %13, align 1
52   %14 = getelementptr inbounds float, float* %B, i64 12
53   %15 = load float, float* %14, align 4
54   %16 = fmul float %15, %T
55   %17 = fpext float %16 to double
56   %18 = fadd double %17, 6.000000e+00
57   %19 = fptosi double %18 to i8
58   %20 = getelementptr inbounds i8, i8* %A, i64 2
59   store i8 %19, i8* %20, align 1
60   ret i32 undef