blob: 6ee983d22c6d0b193b924120b0e3260438a59226 [file] [log] [blame]
Sanjay Patelb653de12014-09-10 17:58:16 +00001; RUN: opt -S -march=r600 -mcpu=cayman -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine < %s | FileCheck %s
Matt Arsenault0be1cb12013-10-02 22:38:17 +00002
3; Artificial datalayout
4target datalayout = "e-p:32:32:32-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-v2048:2048:2048-n32:64"
5
6
7define void @add_ints_1_1_1(i32 addrspace(1)* %a, i32 addrspace(1)* %b, i32 addrspace(1)* %c) #0 {
8; CHECK-LABEL: @add_ints_1_1_1(
9; CHECK: <4 x i32>
10; CHECK: ret
Michael Zolotukhin540580c2014-12-02 22:59:02 +000011
Matt Arsenault0be1cb12013-10-02 22:38:17 +000012entry:
Michael Zolotukhin540580c2014-12-02 22:59:02 +000013 br label %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +000014
Michael Zolotukhin540580c2014-12-02 22:59:02 +000015for.body: ; preds = %entry, %for.body
16 %i.01 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
David Blaikie79e6c742015-02-27 19:29:02 +000017 %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %b, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +000018 %0 = load i32, i32 addrspace(1)* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000019 %arrayidx1 = getelementptr inbounds i32, i32 addrspace(1)* %c, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +000020 %1 = load i32, i32 addrspace(1)* %arrayidx1, align 4
Matt Arsenault0be1cb12013-10-02 22:38:17 +000021 %add = add nsw i32 %0, %1
David Blaikie79e6c742015-02-27 19:29:02 +000022 %arrayidx2 = getelementptr inbounds i32, i32 addrspace(1)* %a, i64 %i.01
Matt Arsenault0be1cb12013-10-02 22:38:17 +000023 store i32 %add, i32 addrspace(1)* %arrayidx2, align 4
Michael Zolotukhin540580c2014-12-02 22:59:02 +000024 %inc = add i64 %i.01, 1
25 %cmp = icmp ult i64 %inc, 200
26 br i1 %cmp, label %for.body, label %for.end
Matt Arsenault0be1cb12013-10-02 22:38:17 +000027
Michael Zolotukhin540580c2014-12-02 22:59:02 +000028for.end: ; preds = %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +000029 ret void
30}
31
32define void @add_ints_as_1_0_0(i32 addrspace(1)* %a, i32* %b, i32* %c) #0 {
33; CHECK-LABEL: @add_ints_as_1_0_0(
34; CHECK-NOT: <4 x i32>
35; CHECK: ret
Michael Zolotukhin540580c2014-12-02 22:59:02 +000036
Matt Arsenault0be1cb12013-10-02 22:38:17 +000037entry:
Michael Zolotukhin540580c2014-12-02 22:59:02 +000038 br label %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +000039
Michael Zolotukhin540580c2014-12-02 22:59:02 +000040for.body: ; preds = %entry, %for.body
41 %i.01 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
David Blaikie79e6c742015-02-27 19:29:02 +000042 %arrayidx = getelementptr inbounds i32, i32* %b, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +000043 %0 = load i32, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000044 %arrayidx1 = getelementptr inbounds i32, i32* %c, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +000045 %1 = load i32, i32* %arrayidx1, align 4
Matt Arsenault0be1cb12013-10-02 22:38:17 +000046 %add = add nsw i32 %0, %1
David Blaikie79e6c742015-02-27 19:29:02 +000047 %arrayidx2 = getelementptr inbounds i32, i32 addrspace(1)* %a, i64 %i.01
Matt Arsenault0be1cb12013-10-02 22:38:17 +000048 store i32 %add, i32 addrspace(1)* %arrayidx2, align 4
Michael Zolotukhin540580c2014-12-02 22:59:02 +000049 %inc = add i64 %i.01, 1
50 %cmp = icmp ult i64 %inc, 200
51 br i1 %cmp, label %for.body, label %for.end
Matt Arsenault0be1cb12013-10-02 22:38:17 +000052
Michael Zolotukhin540580c2014-12-02 22:59:02 +000053for.end: ; preds = %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +000054 ret void
55}
56
57define void @add_ints_as_0_1_0(i32* %a, i32 addrspace(1)* %b, i32* %c) #0 {
58; CHECK-LABEL: @add_ints_as_0_1_0(
59; CHECK-NOT: <4 x i32>
60; CHECK: ret
Michael Zolotukhin540580c2014-12-02 22:59:02 +000061
Matt Arsenault0be1cb12013-10-02 22:38:17 +000062entry:
Michael Zolotukhin540580c2014-12-02 22:59:02 +000063 br label %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +000064
Michael Zolotukhin540580c2014-12-02 22:59:02 +000065for.body: ; preds = %entry, %for.body
66 %i.01 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
David Blaikie79e6c742015-02-27 19:29:02 +000067 %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %b, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +000068 %0 = load i32, i32 addrspace(1)* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000069 %arrayidx1 = getelementptr inbounds i32, i32* %c, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +000070 %1 = load i32, i32* %arrayidx1, align 4
Matt Arsenault0be1cb12013-10-02 22:38:17 +000071 %add = add nsw i32 %0, %1
David Blaikie79e6c742015-02-27 19:29:02 +000072 %arrayidx2 = getelementptr inbounds i32, i32* %a, i64 %i.01
Matt Arsenault0be1cb12013-10-02 22:38:17 +000073 store i32 %add, i32* %arrayidx2, align 4
Michael Zolotukhin540580c2014-12-02 22:59:02 +000074 %inc = add i64 %i.01, 1
75 %cmp = icmp ult i64 %inc, 200
76 br i1 %cmp, label %for.body, label %for.end
Matt Arsenault0be1cb12013-10-02 22:38:17 +000077
Michael Zolotukhin540580c2014-12-02 22:59:02 +000078for.end: ; preds = %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +000079 ret void
80}
81
82define void @add_ints_as_0_1_1(i32* %a, i32 addrspace(1)* %b, i32 addrspace(1)* %c) #0 {
83; CHECK-LABEL: @add_ints_as_0_1_1(
84; CHECK-NOT: <4 x i32>
85; CHECK: ret
Michael Zolotukhin540580c2014-12-02 22:59:02 +000086
Matt Arsenault0be1cb12013-10-02 22:38:17 +000087entry:
Michael Zolotukhin540580c2014-12-02 22:59:02 +000088 br label %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +000089
Michael Zolotukhin540580c2014-12-02 22:59:02 +000090for.body: ; preds = %entry, %for.body
91 %i.01 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
David Blaikie79e6c742015-02-27 19:29:02 +000092 %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %b, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +000093 %0 = load i32, i32 addrspace(1)* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000094 %arrayidx1 = getelementptr inbounds i32, i32 addrspace(1)* %c, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +000095 %1 = load i32, i32 addrspace(1)* %arrayidx1, align 4
Matt Arsenault0be1cb12013-10-02 22:38:17 +000096 %add = add nsw i32 %0, %1
David Blaikie79e6c742015-02-27 19:29:02 +000097 %arrayidx2 = getelementptr inbounds i32, i32* %a, i64 %i.01
Matt Arsenault0be1cb12013-10-02 22:38:17 +000098 store i32 %add, i32* %arrayidx2, align 4
Michael Zolotukhin540580c2014-12-02 22:59:02 +000099 %inc = add i64 %i.01, 1
100 %cmp = icmp ult i64 %inc, 200
101 br i1 %cmp, label %for.body, label %for.end
Matt Arsenault0be1cb12013-10-02 22:38:17 +0000102
Michael Zolotukhin540580c2014-12-02 22:59:02 +0000103for.end: ; preds = %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +0000104 ret void
105}
106
107define void @add_ints_as_0_1_2(i32* %a, i32 addrspace(1)* %b, i32 addrspace(2)* %c) #0 {
108; CHECK-LABEL: @add_ints_as_0_1_2(
109; CHECK-NOT: <4 x i32>
110; CHECK: ret
Michael Zolotukhin540580c2014-12-02 22:59:02 +0000111
Matt Arsenault0be1cb12013-10-02 22:38:17 +0000112entry:
Michael Zolotukhin540580c2014-12-02 22:59:02 +0000113 br label %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +0000114
Michael Zolotukhin540580c2014-12-02 22:59:02 +0000115for.body: ; preds = %entry, %for.body
116 %i.01 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
David Blaikie79e6c742015-02-27 19:29:02 +0000117 %arrayidx = getelementptr inbounds i32, i32 addrspace(1)* %b, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +0000118 %0 = load i32, i32 addrspace(1)* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000119 %arrayidx1 = getelementptr inbounds i32, i32 addrspace(2)* %c, i64 %i.01
David Blaikiea79ac142015-02-27 21:17:42 +0000120 %1 = load i32, i32 addrspace(2)* %arrayidx1, align 4
Matt Arsenault0be1cb12013-10-02 22:38:17 +0000121 %add = add nsw i32 %0, %1
David Blaikie79e6c742015-02-27 19:29:02 +0000122 %arrayidx2 = getelementptr inbounds i32, i32* %a, i64 %i.01
Matt Arsenault0be1cb12013-10-02 22:38:17 +0000123 store i32 %add, i32* %arrayidx2, align 4
Michael Zolotukhin540580c2014-12-02 22:59:02 +0000124 %inc = add i64 %i.01, 1
125 %cmp = icmp ult i64 %inc, 200
126 br i1 %cmp, label %for.body, label %for.end
Matt Arsenault0be1cb12013-10-02 22:38:17 +0000127
Michael Zolotukhin540580c2014-12-02 22:59:02 +0000128for.end: ; preds = %for.body
Matt Arsenault0be1cb12013-10-02 22:38:17 +0000129 ret void
130}
131
132attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }