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 }