blob: 269b07f82d194a9ac8d4e6ce08b3f59c07e6c558 [file] [log] [blame]
Hal Finkelb2336a72012-04-13 20:45:45 +00001target 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"
Chandler Carruth7383bfd62013-01-07 10:22:36 +00002; RUN: opt < %s -bb-vectorize -bb-vectorize-req-chain-depth=3 -bb-vectorize-ignore-target-info -instcombine -gvn -S | FileCheck %s
3; RUN: opt < %s -bb-vectorize -bb-vectorize-req-chain-depth=3 -bb-vectorize-no-bools -bb-vectorize-ignore-target-info -instcombine -gvn -S | FileCheck %s -check-prefix=CHECK-NB
Hal Finkelb2336a72012-04-13 20:45:45 +00004
5; Basic depth-3 chain with select
6define double @test1(double %A1, double %A2, double %B1, double %B2, i1 %C1, i1 %C2) {
Stephen Linc1c7a132013-07-14 01:42:54 +00007; CHECK-LABEL: @test1(
Hal Finkelb2336a72012-04-13 20:45:45 +00008; CHECK: %X1.v.i1.1 = insertelement <2 x double> undef, double %B1, i32 0
Hal Finkelb2336a72012-04-13 20:45:45 +00009; CHECK: %X1.v.i1.2 = insertelement <2 x double> %X1.v.i1.1, double %B2, i32 1
Hal Finkel842ad0b2012-10-31 15:17:07 +000010; CHECK: %X1.v.i0.1 = insertelement <2 x double> undef, double %A1, i32 0
Hal Finkelb2336a72012-04-13 20:45:45 +000011; CHECK: %X1.v.i0.2 = insertelement <2 x double> %X1.v.i0.1, double %A2, i32 1
12 %X1 = fsub double %A1, %B1
13 %X2 = fsub double %A2, %B2
14; CHECK: %X1 = fsub <2 x double> %X1.v.i0.2, %X1.v.i1.2
15 %Y1 = fmul double %X1, %A1
16 %Y2 = fmul double %X2, %A2
17; CHECK: %Y1 = fmul <2 x double> %X1, %X1.v.i0.2
18 %Z1 = select i1 %C1, double %Y1, double %B1
19 %Z2 = select i1 %C2, double %Y2, double %B2
20; CHECK: %Z1.v.i0.1 = insertelement <2 x i1> undef, i1 %C1, i32 0
21; CHECK: %Z1.v.i0.2 = insertelement <2 x i1> %Z1.v.i0.1, i1 %C2, i32 1
22; CHECK: %Z1 = select <2 x i1> %Z1.v.i0.2, <2 x double> %Y1, <2 x double> %X1.v.i1.2
23 %R = fmul double %Z1, %Z2
24; CHECK: %Z1.v.r1 = extractelement <2 x double> %Z1, i32 0
25; CHECK: %Z1.v.r2 = extractelement <2 x double> %Z1, i32 1
26; CHECK: %R = fmul double %Z1.v.r1, %Z1.v.r2
27 ret double %R
28; CHECK: ret double %R
29}
30
Hal Finkel4b06b1a2012-06-23 21:52:50 +000031; Basic depth-3 chain with select (and vect. compare)
32define double @test2(double %A1, double %A2, double %B1, double %B2) {
Stephen Linc1c7a132013-07-14 01:42:54 +000033; CHECK-LABEL: @test2(
34; CHECK-NB-LABEL: @test2(
Hal Finkel4b06b1a2012-06-23 21:52:50 +000035; CHECK: %X1.v.i1.1 = insertelement <2 x double> undef, double %B1, i32 0
Hal Finkel4b06b1a2012-06-23 21:52:50 +000036; CHECK: %X1.v.i1.2 = insertelement <2 x double> %X1.v.i1.1, double %B2, i32 1
Hal Finkel842ad0b2012-10-31 15:17:07 +000037; CHECK: %X1.v.i0.1 = insertelement <2 x double> undef, double %A1, i32 0
Hal Finkel4b06b1a2012-06-23 21:52:50 +000038; CHECK: %X1.v.i0.2 = insertelement <2 x double> %X1.v.i0.1, double %A2, i32 1
39 %X1 = fsub double %A1, %B1
40 %X2 = fsub double %A2, %B2
41; CHECK: %X1 = fsub <2 x double> %X1.v.i0.2, %X1.v.i1.2
42 %Y1 = fmul double %X1, %A1
43 %Y2 = fmul double %X2, %A2
44; CHECK: %Y1 = fmul <2 x double> %X1, %X1.v.i0.2
45 %C1 = fcmp ogt double %X1, %A1
46 %C2 = fcmp ogt double %X2, %A2
47; CHECK: %C1 = fcmp ogt <2 x double> %X1, %X1.v.i0.2
Hal Finkel3099ce92012-06-24 13:28:01 +000048; CHECK-NB: fcmp ogt double
Hal Finkel4b06b1a2012-06-23 21:52:50 +000049 %Z1 = select i1 %C1, double %Y1, double %B1
50 %Z2 = select i1 %C2, double %Y2, double %B2
51; CHECK: %Z1 = select <2 x i1> %C1, <2 x double> %Y1, <2 x double> %X1.v.i1.2
52 %R = fmul double %Z1, %Z2
53; CHECK: %Z1.v.r1 = extractelement <2 x double> %Z1, i32 0
54; CHECK: %Z1.v.r2 = extractelement <2 x double> %Z1, i32 1
55; CHECK: %R = fmul double %Z1.v.r1, %Z1.v.r2
56 ret double %R
57; CHECK: ret double %R
58}
Hal Finkelb2336a72012-04-13 20:45:45 +000059