|
12 | 12 | define i32 @foo(ptr noundef %cp, ptr noundef %old, i32 noundef %c) {
|
13 | 13 | ; CHECK-LABEL: foo:
|
14 | 14 | ; CHECK: # %bb.0: # %entry
|
15 |
| -; CHECK-NEXT: lwz r7, 0(r4) |
16 | 15 | ; CHECK-NEXT: stw r3, -4(r1)
|
17 | 16 | ; CHECK-NEXT: stw r4, -8(r1)
|
| 17 | +; CHECK-NEXT: lwz r7, 0(r4) |
18 | 18 | ; CHECK-NEXT: stw r5, -12(r1)
|
19 | 19 | ; CHECK-NEXT: stw r5, -16(r1)
|
20 |
| -; CHECK-NEXT: L..BB0_1: # %entry |
21 |
| -; CHECK-NEXT: # |
22 | 20 | ; CHECK-NEXT: lwarx r6, 0, r3
|
23 |
| -; CHECK-NEXT: cmpw cr1, r6, r7 |
24 |
| -; CHECK-NEXT: bne cr1, L..BB0_3 |
25 |
| -; CHECK-NEXT: # %bb.2: # %entry |
26 |
| -; CHECK-NEXT: # |
27 |
| -; CHECK-NEXT: stwcx. r5, 0, r3 |
28 |
| -; CHECK-NEXT: bne cr0, L..BB0_1 |
29 |
| -; CHECK-NEXT: L..BB0_3: # %entry |
30 | 21 | ; CHECK-NEXT: cmplw r6, r7
|
| 22 | +; CHECK-NEXT: bne cr0, L..BB0_2 |
| 23 | +; CHECK-NEXT: # %bb.1: # %cmpxchg.fencedstore |
| 24 | +; CHECK-NEXT: stwcx. r5, 0, r3 |
31 | 25 | ; CHECK-NEXT: beq cr0, L..BB0_5
|
32 |
| -; CHECK-NEXT: # %bb.4: # %cmpxchg.store_expected |
| 26 | +; CHECK-NEXT: L..BB0_2: # %cmpxchg.failure |
| 27 | +; CHECK-NEXT: crxor 4*cr5+lt, 4*cr5+lt, 4*cr5+lt |
| 28 | +; CHECK-NEXT: # %bb.3: # %cmpxchg.store_expected |
33 | 29 | ; CHECK-NEXT: stw r6, 0(r4)
|
34 |
| -; CHECK-NEXT: L..BB0_5: # %cmpxchg.continue |
| 30 | +; CHECK-NEXT: L..BB0_4: # %cmpxchg.continue |
35 | 31 | ; CHECK-NEXT: li r3, 0
|
36 | 32 | ; CHECK-NEXT: li r4, 1
|
37 |
| -; CHECK-NEXT: isel r3, r4, r3, 4*cr1+eq |
| 33 | +; CHECK-NEXT: isel r3, r4, r3, 4*cr5+lt |
38 | 34 | ; CHECK-NEXT: stb r3, -17(r1)
|
39 | 35 | ; CHECK-NEXT: blr
|
| 36 | +; CHECK-NEXT: L..BB0_5: |
| 37 | +; CHECK-NEXT: creqv 4*cr5+lt, 4*cr5+lt, 4*cr5+lt |
| 38 | +; CHECK-NEXT: b L..BB0_4 |
40 | 39 | ;
|
41 | 40 | ; CHECK64-LABEL: foo:
|
42 | 41 | ; CHECK64: # %bb.0: # %entry
|
43 |
| -; CHECK64-NEXT: lwz r7, 0(r4) |
44 | 42 | ; CHECK64-NEXT: std r3, -8(r1)
|
45 | 43 | ; CHECK64-NEXT: std r4, -16(r1)
|
| 44 | +; CHECK64-NEXT: lwz r7, 0(r4) |
46 | 45 | ; CHECK64-NEXT: stw r5, -20(r1)
|
47 | 46 | ; CHECK64-NEXT: stw r5, -24(r1)
|
48 |
| -; CHECK64-NEXT: L..BB0_1: # %entry |
49 |
| -; CHECK64-NEXT: # |
50 | 47 | ; CHECK64-NEXT: lwarx r6, 0, r3
|
51 |
| -; CHECK64-NEXT: cmpw cr1, r6, r7 |
52 |
| -; CHECK64-NEXT: bne cr1, L..BB0_3 |
53 |
| -; CHECK64-NEXT: # %bb.2: # %entry |
54 |
| -; CHECK64-NEXT: # |
55 |
| -; CHECK64-NEXT: stwcx. r5, 0, r3 |
56 |
| -; CHECK64-NEXT: bne cr0, L..BB0_1 |
57 |
| -; CHECK64-NEXT: L..BB0_3: # %entry |
58 | 48 | ; CHECK64-NEXT: cmplw r6, r7
|
| 49 | +; CHECK64-NEXT: bne cr0, L..BB0_2 |
| 50 | +; CHECK64-NEXT: # %bb.1: # %cmpxchg.fencedstore |
| 51 | +; CHECK64-NEXT: stwcx. r5, 0, r3 |
59 | 52 | ; CHECK64-NEXT: beq cr0, L..BB0_5
|
60 |
| -; CHECK64-NEXT: # %bb.4: # %cmpxchg.store_expected |
| 53 | +; CHECK64-NEXT: L..BB0_2: # %cmpxchg.failure |
| 54 | +; CHECK64-NEXT: crxor 4*cr5+lt, 4*cr5+lt, 4*cr5+lt |
| 55 | +; CHECK64-NEXT: # %bb.3: # %cmpxchg.store_expected |
61 | 56 | ; CHECK64-NEXT: stw r6, 0(r4)
|
62 |
| -; CHECK64-NEXT: L..BB0_5: # %cmpxchg.continue |
| 57 | +; CHECK64-NEXT: L..BB0_4: # %cmpxchg.continue |
63 | 58 | ; CHECK64-NEXT: li r3, 0
|
64 | 59 | ; CHECK64-NEXT: li r4, 1
|
65 |
| -; CHECK64-NEXT: isel r3, r4, r3, 4*cr1+eq |
| 60 | +; CHECK64-NEXT: isel r3, r4, r3, 4*cr5+lt |
66 | 61 | ; CHECK64-NEXT: li r4, 1
|
67 | 62 | ; CHECK64-NEXT: stb r3, -25(r1)
|
68 | 63 | ; CHECK64-NEXT: li r3, 0
|
69 |
| -; CHECK64-NEXT: isel r3, r4, r3, 4*cr1+eq |
| 64 | +; CHECK64-NEXT: isel r3, r4, r3, 4*cr5+lt |
70 | 65 | ; CHECK64-NEXT: blr
|
| 66 | +; CHECK64-NEXT: L..BB0_5: |
| 67 | +; CHECK64-NEXT: creqv 4*cr5+lt, 4*cr5+lt, 4*cr5+lt |
| 68 | +; CHECK64-NEXT: b L..BB0_4 |
71 | 69 | entry:
|
72 | 70 | %cp.addr = alloca ptr, align 4
|
73 | 71 | %old.addr = alloca ptr, align 4
|
|
0 commit comments