Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/SystemZ/atomicrmw-minmax-03.ll @ 121:803732b1fca8
LLVM 5.0
author | kono |
---|---|
date | Fri, 27 Oct 2017 17:07:41 +0900 |
parents | 1172e4bd9c6f |
children |
comparison
equal
deleted
inserted
replaced
120:1172e4bd9c6f | 121:803732b1fca8 |
---|---|
5 | 5 |
6 ; Check signed minium. | 6 ; Check signed minium. |
7 define i32 @f1(i32 %dummy, i32 *%src, i32 %b) { | 7 define i32 @f1(i32 %dummy, i32 *%src, i32 %b) { |
8 ; CHECK-LABEL: f1: | 8 ; CHECK-LABEL: f1: |
9 ; CHECK: l %r2, 0(%r3) | 9 ; CHECK: l %r2, 0(%r3) |
10 ; CHECK: [[LOOP:\.[^:]*]]: | 10 ; CHECK: j [[LOOP:\.[^:]*]] |
11 ; CHECK: lr [[NEW:%r[0-9]+]], %r2 | 11 ; CHECK: [[BB1:\.[^:]*]]: |
12 ; CHECK: cs %r2, [[NEW:%r[0-9]+]], 0(%r3) | |
13 ; CHECK: ber %r14 | |
14 ; CHECK: [[LOOP]]: | |
15 ; CHECK: lr [[NEW]], %r2 | |
12 ; CHECK: crjle %r2, %r4, [[KEEP:\..*]] | 16 ; CHECK: crjle %r2, %r4, [[KEEP:\..*]] |
13 ; CHECK: lr [[NEW]], %r4 | 17 ; CHECK: lr [[NEW]], %r4 |
14 ; CHECK: cs %r2, [[NEW]], 0(%r3) | 18 ; CHECK: j [[BB1]] |
15 ; CHECK: ber %r14 | |
16 ; CHECK: j [[LOOP]] | |
17 %res = atomicrmw min i32 *%src, i32 %b seq_cst | 19 %res = atomicrmw min i32 *%src, i32 %b seq_cst |
18 ret i32 %res | 20 ret i32 %res |
19 } | 21 } |
20 | 22 |
21 ; Check signed maximum. | 23 ; Check signed maximum. |
22 define i32 @f2(i32 %dummy, i32 *%src, i32 %b) { | 24 define i32 @f2(i32 %dummy, i32 *%src, i32 %b) { |
23 ; CHECK-LABEL: f2: | 25 ; CHECK-LABEL: f2: |
24 ; CHECK: l %r2, 0(%r3) | 26 ; CHECK: l %r2, 0(%r3) |
25 ; CHECK: [[LOOP:\.[^:]*]]: | 27 ; CHECK: j [[LOOP:\.[^:]*]] |
26 ; CHECK: lr [[NEW:%r[0-9]+]], %r2 | 28 ; CHECK: [[BB1:\.[^:]*]]: |
29 ; CHECK: cs %r2, [[NEW:%r[0-9]+]], 0(%r3) | |
30 ; CHECK: ber %r14 | |
31 ; CHECK: [[LOOP]]: | |
32 ; CHECK: lr [[NEW]], %r2 | |
27 ; CHECK: crjhe %r2, %r4, [[KEEP:\..*]] | 33 ; CHECK: crjhe %r2, %r4, [[KEEP:\..*]] |
28 ; CHECK: lr [[NEW]], %r4 | 34 ; CHECK: lr [[NEW]], %r4 |
29 ; CHECK: cs %r2, [[NEW]], 0(%r3) | 35 ; CHECK: j [[BB1]] |
30 ; CHECK: ber %r14 | |
31 ; CHECK: j [[LOOP]] | |
32 %res = atomicrmw max i32 *%src, i32 %b seq_cst | 36 %res = atomicrmw max i32 *%src, i32 %b seq_cst |
33 ret i32 %res | 37 ret i32 %res |
34 } | 38 } |
35 | 39 |
36 ; Check unsigned minimum. | 40 ; Check unsigned minimum. |
37 define i32 @f3(i32 %dummy, i32 *%src, i32 %b) { | 41 define i32 @f3(i32 %dummy, i32 *%src, i32 %b) { |
38 ; CHECK-LABEL: f3: | 42 ; CHECK-LABEL: f3: |
39 ; CHECK: l %r2, 0(%r3) | 43 ; CHECK: l %r2, 0(%r3) |
40 ; CHECK: [[LOOP:\.[^:]*]]: | 44 ; CHECK: j [[LOOP:\.[^:]*]] |
41 ; CHECK: lr [[NEW:%r[0-9]+]], %r2 | 45 ; CHECK: [[BB1:\.[^:]*]]: |
46 ; CHECK: cs %r2, [[NEW:%r[0-9]+]], 0(%r3) | |
47 ; CHECK: ber %r14 | |
48 ; CHECK: [[LOOP]]: | |
49 ; CHECK: lr [[NEW]], %r2 | |
42 ; CHECK: clrjle %r2, %r4, [[KEEP:\..*]] | 50 ; CHECK: clrjle %r2, %r4, [[KEEP:\..*]] |
43 ; CHECK: lr [[NEW]], %r4 | 51 ; CHECK: lr [[NEW]], %r4 |
44 ; CHECK: cs %r2, [[NEW]], 0(%r3) | 52 ; CHECK: j [[BB1]] |
45 ; CHECK: ber %r14 | |
46 ; CHECK: j [[LOOP]] | |
47 %res = atomicrmw umin i32 *%src, i32 %b seq_cst | 53 %res = atomicrmw umin i32 *%src, i32 %b seq_cst |
48 ret i32 %res | 54 ret i32 %res |
49 } | 55 } |
50 | 56 |
51 ; Check unsigned maximum. | 57 ; Check unsigned maximum. |
52 define i32 @f4(i32 %dummy, i32 *%src, i32 %b) { | 58 define i32 @f4(i32 %dummy, i32 *%src, i32 %b) { |
53 ; CHECK-LABEL: f4: | 59 ; CHECK-LABEL: f4: |
54 ; CHECK: l %r2, 0(%r3) | 60 ; CHECK: l %r2, 0(%r3) |
55 ; CHECK: [[LOOP:\.[^:]*]]: | 61 ; CHECK: j [[LOOP:\.[^:]*]] |
56 ; CHECK: lr [[NEW:%r[0-9]+]], %r2 | 62 ; CHECK: [[BB1:\.[^:]*]]: |
63 ; CHECK: cs %r2, [[NEW:%r[0-9]+]], 0(%r3) | |
64 ; CHECK: ber %r14 | |
65 ; CHECK: [[LOOP]]: | |
66 ; CHECK: lr [[NEW]], %r2 | |
57 ; CHECK: clrjhe %r2, %r4, [[KEEP:\..*]] | 67 ; CHECK: clrjhe %r2, %r4, [[KEEP:\..*]] |
58 ; CHECK: lr [[NEW]], %r4 | 68 ; CHECK: lr [[NEW]], %r4 |
59 ; CHECK: cs %r2, [[NEW]], 0(%r3) | 69 ; CHECK: j [[BB1]] |
60 ; CHECK: ber %r14 | |
61 ; CHECK: j [[LOOP]] | |
62 %res = atomicrmw umax i32 *%src, i32 %b seq_cst | 70 %res = atomicrmw umax i32 *%src, i32 %b seq_cst |
63 ret i32 %res | 71 ret i32 %res |
64 } | 72 } |
65 | 73 |
66 ; Check the high end of the aligned CS range. | 74 ; Check the high end of the aligned CS range. |
157 | 165 |
158 ; Check that constants are handled. | 166 ; Check that constants are handled. |
159 define i32 @f13(i32 %dummy, i32 *%ptr) { | 167 define i32 @f13(i32 %dummy, i32 *%ptr) { |
160 ; CHECK-LABEL: f13: | 168 ; CHECK-LABEL: f13: |
161 ; CHECK: lhi [[LIMIT:%r[0-9]+]], 42 | 169 ; CHECK: lhi [[LIMIT:%r[0-9]+]], 42 |
162 ; CHECK: l %r2, 0(%r3) | 170 ; CHECK: j [[LOOP:\.[^:]*]] |
163 ; CHECK: [[LOOP:\.[^:]*]]: | 171 ; CHECK: [[BB1:\.[^:]*]]: |
164 ; CHECK: lr [[NEW:%r[0-9]+]], %r2 | 172 ; CHECK: cs %r2, [[NEW:%r[0-9]+]], 0(%r3) |
173 ; CHECK: ber %r14 | |
174 ; CHECK: [[LOOP]]: | |
175 ; CHECK: lr [[NEW]], %r2 | |
165 ; CHECK: crjle %r2, [[LIMIT]], [[KEEP:\..*]] | 176 ; CHECK: crjle %r2, [[LIMIT]], [[KEEP:\..*]] |
166 ; CHECK: lhi [[NEW]], 42 | 177 ; CHECK: lhi [[NEW]], 42 |
167 ; CHECK: cs %r2, [[NEW]], 0(%r3) | 178 ; CHECK: j [[BB1]] |
168 ; CHECK: ber %r14 | |
169 ; CHECK: j [[LOOP]] | |
170 %res = atomicrmw min i32 *%ptr, i32 42 seq_cst | 179 %res = atomicrmw min i32 *%ptr, i32 42 seq_cst |
171 ret i32 %res | 180 ret i32 %res |
172 } | 181 } |