1; RUN: llc < %s -march=amdgcn -mcpu=verde -verify-machineinstrs | FileCheck %s
2; RUN: llc < %s -march=amdgcn -mcpu=tonga -verify-machineinstrs | FileCheck %s
3; RUN: llc < %s -march=amdgcn -mcpu=gfx900 -verify-machineinstrs | FileCheck %s
4
5; CHECK: s_add_i32 s0, s0, s1
6; CHECK: s_add_i32 s1, s0, s2
7; CHECK: s_add_i32 s2, s1, s3
8; CHECK: s_add_i32 s3, s2, s4
9; CHECK: s_add_i32 s4, s3, s5
10; CHECK: s_add_i32 s5, s4, s6
11; CHECK: s_add_i32 s6, s5, s7
12; CHECK: s_add_i32 s7, s6, s8
13; CHECK: s_add_i32 s8, s7, s9
14; CHECK: s_add_i32 s9, s8, s10
15; CHECK: s_add_i32 s10, s9, s11
16; CHECK: s_add_i32 s11, s10, s12
17; CHECK: s_add_i32 s12, s11, s13
18; CHECK: s_add_i32 s13, s12, s14
19; CHECK: s_add_i32 s14, s13, s15
20; CHECK: s_add_i32 s15, s14, s16
21; CHECK: s_add_i32 s16, s15, s17
22; CHECK: s_add_i32 s17, s16, s18
23; CHECK: s_add_i32 s18, s17, s19
24; CHECK: s_add_i32 s19, s18, s20
25; CHECK: s_add_i32 s20, s19, s21
26; CHECK: s_add_i32 s21, s20, s22
27; CHECK: s_add_i32 s22, s21, s23
28; CHECK: s_add_i32 s23, s22, s24
29; CHECK: s_add_i32 s24, s23, s25
30; CHECK: s_add_i32 s25, s24, s26
31; CHECK: s_add_i32 s26, s25, s27
32; CHECK: s_add_i32 s27, s26, s28
33; CHECK: s_add_i32 s28, s27, s29
34define amdgpu_gs { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } @_amdgpu_gs_sgpr_limit_i32 (i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg) {
35.entry:
36  %30 = add i32 %0, %1
37  %31 =  add i32 %30, %2
38  %32 =  add i32 %31, %3
39  %33 =  add i32 %32, %4
40  %34 =  add i32 %33, %5
41  %35 =  add i32 %34, %6
42  %36 =  add i32 %35, %7
43  %37 =  add i32 %36, %8
44  %38 =  add i32 %37, %9
45  %39 =  add i32 %38, %10
46  %40 =  add i32 %39, %11
47  %41 =  add i32 %40, %12
48  %42 =  add i32 %41, %13
49  %43 =  add i32 %42, %14
50  %44 =  add i32 %43, %15
51  %45 =  add i32 %44, %16
52  %46 =  add i32 %45, %17
53  %47 =  add i32 %46, %18
54  %48 =  add i32 %47, %19
55  %49 =  add i32 %48, %20
56  %50 =  add i32 %49, %21
57  %51 =  add i32 %50, %22
58  %52 =  add i32 %51, %23
59  %53 =  add i32 %52, %24
60  %54 =  add i32 %53, %25
61  %55 =  add i32 %54, %26
62  %56 =  add i32 %55, %27
63  %57 =  add i32 %56, %28
64  %58 =  add i32 %57, %29
65  %59 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } undef, i32 %30, 0
66  %60 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %59, i32 %31, 1
67  %61 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %60, i32 %32, 2
68  %62 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %61, i32 %33, 3
69  %63 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %62, i32 %34, 4
70  %64 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %63, i32 %35, 5
71  %65 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %64, i32 %36, 6
72  %66 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %65, i32 %37, 7
73  %67 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %66, i32 %38, 8
74  %68 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %67, i32 %39, 9
75  %69 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %68, i32 %40, 10
76  %70 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %69, i32 %41, 11
77  %71 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %70, i32 %42, 12
78  %72 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %71, i32 %43, 13
79  %73 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %72, i32 %44, 14
80  %74 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %73, i32 %45, 15
81  %75 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %74, i32 %46, 16
82  %76 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %75, i32 %47, 17
83  %77 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %76, i32 %48, 18
84  %78 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %77, i32 %49, 19
85  %79 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %78, i32 %50, 20
86  %80 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %79, i32 %51, 21
87  %81 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %80, i32 %52, 22
88  %82 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %81, i32 %53, 23
89  %83 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %82, i32 %54, 24
90  %84 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %83, i32 %55, 25
91  %85 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %84, i32 %56, 26
92  %86 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %85, i32 %57, 27
93  %87 = insertvalue { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %86, i32 %58, 28
94  ret { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } %87
95}
96
97; CHECK: s_xor_b64 s[0:1], s[0:1], s[2:3]
98; CHECK: s_xor_b64 s[0:1], s[0:1], s[4:5]
99; CHECK: s_xor_b64 s[0:1], s[0:1], s[6:7]
100; CHECK: s_xor_b64 s[0:1], s[0:1], s[8:9]
101; CHECK: s_xor_b64 s[0:1], s[0:1], s[10:11]
102; CHECK: s_xor_b64 s[0:1], s[0:1], s[12:13]
103; CHECK: s_xor_b64 s[0:1], s[0:1], s[14:15]
104; CHECK: s_xor_b64 s[0:1], s[0:1], s[16:17]
105; CHECK: s_xor_b64 s[0:1], s[0:1], s[18:19]
106; CHECK: s_xor_b64 s[0:1], s[0:1], s[20:21]
107; CHECK: s_xor_b64 s[0:1], s[0:1], s[22:23]
108; CHECK: s_xor_b64 s[0:1], s[0:1], s[24:25]
109; CHECK: s_xor_b64 s[0:1], s[0:1], s[26:27]
110; CHECK: s_xor_b64 s[0:1], s[0:1], s[28:29]
111; CHECK: s_xor_b64 s[0:1], s[0:1], s[30:31]
112; CHECK: s_xor_b64 s[0:1], s[0:1], s[32:33]
113; CHECK: s_xor_b64 s[0:1], s[0:1], s[34:35]
114define amdgpu_gs void @_amdgpu_gs_sgpr_limit_i64(i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, i64 inreg, <4 x i32> inreg %addr) {
115.entry:
116  %19 = xor i64 %0, %1
117  %20 =  xor i64 %19, %2
118  %21 =  xor i64 %20, %3
119  %22 =  xor i64 %21, %4
120  %23 =  xor i64 %22, %5
121  %24 =  xor i64 %23, %6
122  %25 =  xor i64 %24, %7
123  %26 =  xor i64 %25, %8
124  %27 =  xor i64 %26, %9
125  %28 =  xor i64 %27, %10
126  %29 =  xor i64 %28, %11
127  %30 =  xor i64 %29, %12
128  %31 =  xor i64 %30, %13
129  %32 =  xor i64 %31, %14
130  %33 =  xor i64 %32, %15
131  %34 =  xor i64 %33, %16
132  %35 =  xor i64 %34, %17
133  %36 = bitcast i64 %35 to <2 x i32>
134  call void @llvm.amdgcn.raw.buffer.store.v2i32(<2 x i32> %36, <4 x i32> %addr, i32 4, i32 0, i32 0)
135  ret void
136}
137
138declare void @llvm.amdgcn.raw.buffer.store.v2i32(<2 x i32>, <4 x i32>, i32, i32, i32)
139