1; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
2
3
4declare i32 @llvm.nvvm.read.ptx.sreg.envreg0()
5declare i32 @llvm.nvvm.read.ptx.sreg.envreg1()
6declare i32 @llvm.nvvm.read.ptx.sreg.envreg2()
7declare i32 @llvm.nvvm.read.ptx.sreg.envreg3()
8declare i32 @llvm.nvvm.read.ptx.sreg.envreg4()
9declare i32 @llvm.nvvm.read.ptx.sreg.envreg5()
10declare i32 @llvm.nvvm.read.ptx.sreg.envreg6()
11declare i32 @llvm.nvvm.read.ptx.sreg.envreg7()
12declare i32 @llvm.nvvm.read.ptx.sreg.envreg8()
13declare i32 @llvm.nvvm.read.ptx.sreg.envreg9()
14declare i32 @llvm.nvvm.read.ptx.sreg.envreg10()
15declare i32 @llvm.nvvm.read.ptx.sreg.envreg11()
16declare i32 @llvm.nvvm.read.ptx.sreg.envreg12()
17declare i32 @llvm.nvvm.read.ptx.sreg.envreg13()
18declare i32 @llvm.nvvm.read.ptx.sreg.envreg14()
19declare i32 @llvm.nvvm.read.ptx.sreg.envreg15()
20declare i32 @llvm.nvvm.read.ptx.sreg.envreg16()
21declare i32 @llvm.nvvm.read.ptx.sreg.envreg17()
22declare i32 @llvm.nvvm.read.ptx.sreg.envreg18()
23declare i32 @llvm.nvvm.read.ptx.sreg.envreg19()
24declare i32 @llvm.nvvm.read.ptx.sreg.envreg20()
25declare i32 @llvm.nvvm.read.ptx.sreg.envreg21()
26declare i32 @llvm.nvvm.read.ptx.sreg.envreg22()
27declare i32 @llvm.nvvm.read.ptx.sreg.envreg23()
28declare i32 @llvm.nvvm.read.ptx.sreg.envreg24()
29declare i32 @llvm.nvvm.read.ptx.sreg.envreg25()
30declare i32 @llvm.nvvm.read.ptx.sreg.envreg26()
31declare i32 @llvm.nvvm.read.ptx.sreg.envreg27()
32declare i32 @llvm.nvvm.read.ptx.sreg.envreg28()
33declare i32 @llvm.nvvm.read.ptx.sreg.envreg29()
34declare i32 @llvm.nvvm.read.ptx.sreg.envreg30()
35declare i32 @llvm.nvvm.read.ptx.sreg.envreg31()
36
37
38; CHECK: foo
39define i32 @foo() {
40; CHECK: mov.b32 %r{{[0-9]+}}, %envreg0
41  %val0 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg0()
42; CHECK: mov.b32 %r{{[0-9]+}}, %envreg1
43  %val1 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg1()
44; CHECK: mov.b32 %r{{[0-9]+}}, %envreg2
45  %val2 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg2()
46; CHECK: mov.b32 %r{{[0-9]+}}, %envreg3
47  %val3 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg3()
48; CHECK: mov.b32 %r{{[0-9]+}}, %envreg4
49  %val4 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg4()
50; CHECK: mov.b32 %r{{[0-9]+}}, %envreg5
51  %val5 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg5()
52; CHECK: mov.b32 %r{{[0-9]+}}, %envreg6
53  %val6 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg6()
54; CHECK: mov.b32 %r{{[0-9]+}}, %envreg7
55  %val7 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg7()
56; CHECK: mov.b32 %r{{[0-9]+}}, %envreg8
57  %val8 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg8()
58; CHECK: mov.b32 %r{{[0-9]+}}, %envreg9
59  %val9 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg9()
60; CHECK: mov.b32 %r{{[0-9]+}}, %envreg10
61  %val10 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg10()
62; CHECK: mov.b32 %r{{[0-9]+}}, %envreg11
63  %val11 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg11()
64; CHECK: mov.b32 %r{{[0-9]+}}, %envreg12
65  %val12 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg12()
66; CHECK: mov.b32 %r{{[0-9]+}}, %envreg13
67  %val13 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg13()
68; CHECK: mov.b32 %r{{[0-9]+}}, %envreg14
69  %val14 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg14()
70; CHECK: mov.b32 %r{{[0-9]+}}, %envreg15
71  %val15 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg15()
72; CHECK: mov.b32 %r{{[0-9]+}}, %envreg16
73  %val16 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg16()
74; CHECK: mov.b32 %r{{[0-9]+}}, %envreg17
75  %val17 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg17()
76; CHECK: mov.b32 %r{{[0-9]+}}, %envreg18
77  %val18 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg18()
78; CHECK: mov.b32 %r{{[0-9]+}}, %envreg19
79  %val19 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg19()
80; CHECK: mov.b32 %r{{[0-9]+}}, %envreg20
81  %val20 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg20()
82; CHECK: mov.b32 %r{{[0-9]+}}, %envreg21
83  %val21 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg21()
84; CHECK: mov.b32 %r{{[0-9]+}}, %envreg22
85  %val22 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg22()
86; CHECK: mov.b32 %r{{[0-9]+}}, %envreg23
87  %val23 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg23()
88; CHECK: mov.b32 %r{{[0-9]+}}, %envreg24
89  %val24 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg24()
90; CHECK: mov.b32 %r{{[0-9]+}}, %envreg25
91  %val25 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg25()
92; CHECK: mov.b32 %r{{[0-9]+}}, %envreg26
93  %val26 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg26()
94; CHECK: mov.b32 %r{{[0-9]+}}, %envreg27
95  %val27 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg27()
96; CHECK: mov.b32 %r{{[0-9]+}}, %envreg28
97  %val28 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg28()
98; CHECK: mov.b32 %r{{[0-9]+}}, %envreg29
99  %val29 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg29()
100; CHECK: mov.b32 %r{{[0-9]+}}, %envreg30
101  %val30 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg30()
102; CHECK: mov.b32 %r{{[0-9]+}}, %envreg31
103  %val31 = tail call i32 @llvm.nvvm.read.ptx.sreg.envreg31()
104
105
106  %ret0 = add i32 %val0, %val1
107  %ret1 = add i32 %ret0, %val2
108  %ret2 = add i32 %ret1, %val3
109  %ret3 = add i32 %ret2, %val4
110  %ret4 = add i32 %ret3, %val5
111  %ret5 = add i32 %ret4, %val6
112  %ret6 = add i32 %ret5, %val7
113  %ret7 = add i32 %ret6, %val8
114  %ret8 = add i32 %ret7, %val9
115  %ret9 = add i32 %ret8, %val10
116  %ret10 = add i32 %ret9, %val11
117  %ret11 = add i32 %ret10, %val12
118  %ret12 = add i32 %ret11, %val13
119  %ret13 = add i32 %ret12, %val14
120  %ret14 = add i32 %ret13, %val15
121  %ret15 = add i32 %ret14, %val16
122  %ret16 = add i32 %ret15, %val17
123  %ret17 = add i32 %ret16, %val18
124  %ret18 = add i32 %ret17, %val19
125  %ret19 = add i32 %ret18, %val20
126  %ret20 = add i32 %ret19, %val21
127  %ret21 = add i32 %ret20, %val22
128  %ret22 = add i32 %ret21, %val23
129  %ret23 = add i32 %ret22, %val24
130  %ret24 = add i32 %ret23, %val25
131  %ret25 = add i32 %ret24, %val26
132  %ret26 = add i32 %ret25, %val27
133  %ret27 = add i32 %ret26, %val28
134  %ret28 = add i32 %ret27, %val29
135  %ret29 = add i32 %ret28, %val30
136  %ret30 = add i32 %ret29, %val31
137
138  ret i32 %ret30
139}
140