comparison test/CodeGen/SystemZ/atomicrmw-add-02.ll @ 120:1172e4bd9c6f

update 4.0.0
author mir3636
date Fri, 25 Nov 2016 19:14:25 +0900
parents 95c75e76d11b
children 803732b1fca8
comparison
equal deleted inserted replaced
101:34baf5011add 120:1172e4bd9c6f
1 ; Test 16-bit atomic additions. 1 ; Test 16-bit atomic additions.
2 ; 2 ;
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK 3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-SHIFT1 4 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-SHIFT1
5 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-SHIFT2 5 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-SHIFT2
6 6
7 ; Check addition of a variable. 7 ; Check addition of a variable.
8 ; - CHECK is for the main loop. 8 ; - CHECK is for the main loop.
12 ; - CHECK-SHIFT2 makes sure that %b is shifted into the high part of the word 12 ; - CHECK-SHIFT2 makes sure that %b is shifted into the high part of the word
13 ; before being used. This shift is independent of the other loop prologue 13 ; before being used. This shift is independent of the other loop prologue
14 ; instructions. 14 ; instructions.
15 define i16 @f1(i16 *%src, i16 %b) { 15 define i16 @f1(i16 *%src, i16 %b) {
16 ; CHECK-LABEL: f1: 16 ; CHECK-LABEL: f1:
17 ; CHECK: sllg [[SHIFT:%r[1-9]+]], %r2, 3 17 ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}}
18 ; CHECK: nill %r2, 65532 18 ; CHECK: sll %r2, 3
19 ; CHECK: l [[OLD:%r[0-9]+]], 0(%r2) 19 ; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]])
20 ; CHECK: [[LABEL:\.[^:]*]]: 20 ; CHECK: [[LABEL:\.[^:]*]]:
21 ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0([[SHIFT]]) 21 ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2)
22 ; CHECK: ar [[ROT]], %r3 22 ; CHECK: ar [[ROT]], %r3
23 ; CHECK: rll [[NEW:%r[0-9]+]], [[ROT]], 0({{%r[1-9]+}}) 23 ; CHECK: rll [[NEW:%r[0-9]+]], [[ROT]], 0({{%r[1-9]+}})
24 ; CHECK: cs [[OLD]], [[NEW]], 0(%r2) 24 ; CHECK: cs [[OLD]], [[NEW]], 0([[RISBG]])
25 ; CHECK: jl [[LABEL]] 25 ; CHECK: jl [[LABEL]]
26 ; CHECK: rll %r2, [[OLD]], 16([[SHIFT]]) 26 ; CHECK: rll %r2, [[OLD]], 16(%r2)
27 ; CHECK: br %r14 27 ; CHECK: br %r14
28 ; 28 ;
29 ; CHECK-SHIFT1-LABEL: f1: 29 ; CHECK-SHIFT1-LABEL: f1:
30 ; CHECK-SHIFT1: sllg [[SHIFT:%r[1-9]+]], %r2, 3 30 ; CHECK-SHIFT1: sll [[SHIFT:%r[1-9]+]], 3
31 ; CHECK-SHIFT1: lcr [[NEGSHIFT:%r[1-9]+]], [[SHIFT]] 31 ; CHECK-SHIFT1: lcr [[NEGSHIFT:%r[1-9]+]], [[SHIFT]]
32 ; CHECK-SHIFT1: rll 32 ; CHECK-SHIFT1: rll
33 ; CHECK-SHIFT1: rll {{%r[0-9]+}}, {{%r[0-9]+}}, 0([[NEGSHIFT]]) 33 ; CHECK-SHIFT1: rll {{%r[0-9]+}}, {{%r[0-9]+}}, 0([[NEGSHIFT]])
34 ; CHECK-SHIFT1: rll 34 ; CHECK-SHIFT1: rll
35 ; CHECK-SHIFT1: br %r14 35 ; CHECK-SHIFT1: br %r14
46 } 46 }
47 47
48 ; Check the minimum signed value. We add 0x80000000 to the rotated word. 48 ; Check the minimum signed value. We add 0x80000000 to the rotated word.
49 define i16 @f2(i16 *%src) { 49 define i16 @f2(i16 *%src) {
50 ; CHECK-LABEL: f2: 50 ; CHECK-LABEL: f2:
51 ; CHECK: sllg [[SHIFT:%r[1-9]+]], %r2, 3 51 ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0
52 ; CHECK: nill %r2, 65532 52 ; CHECK: sll %r2, 3
53 ; CHECK: l [[OLD:%r[0-9]+]], 0(%r2) 53 ; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]])
54 ; CHECK: [[LABEL:\.[^:]*]]: 54 ; CHECK: [[LABEL:\.[^:]*]]:
55 ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0([[SHIFT]]) 55 ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2)
56 ; CHECK: afi [[ROT]], -2147483648 56 ; CHECK: afi [[ROT]], -2147483648
57 ; CHECK: rll [[NEW:%r[0-9]+]], [[ROT]], 0([[NEGSHIFT:%r[1-9]+]]) 57 ; CHECK: rll [[NEW:%r[0-9]+]], [[ROT]], 0([[NEGSHIFT:%r[1-9]+]])
58 ; CHECK: cs [[OLD]], [[NEW]], 0(%r2) 58 ; CHECK: cs [[OLD]], [[NEW]], 0([[RISBG]])
59 ; CHECK: jl [[LABEL]] 59 ; CHECK: jl [[LABEL]]
60 ; CHECK: rll %r2, [[OLD]], 16([[SHIFT]]) 60 ; CHECK: rll %r2, [[OLD]], 16(%r2)
61 ; CHECK: br %r14 61 ; CHECK: br %r14
62 ; 62 ;
63 ; CHECK-SHIFT1-LABEL: f2: 63 ; CHECK-SHIFT1-LABEL: f2:
64 ; CHECK-SHIFT1: sllg [[SHIFT:%r[1-9]+]], %r2, 3 64 ; CHECK-SHIFT1: sll [[SHIFT:%r[1-9]+]], 3
65 ; CHECK-SHIFT1: lcr [[NEGSHIFT:%r[1-9]+]], [[SHIFT]] 65 ; CHECK-SHIFT1: lcr [[NEGSHIFT:%r[1-9]+]], [[SHIFT]]
66 ; CHECK-SHIFT1: rll 66 ; CHECK-SHIFT1: rll
67 ; CHECK-SHIFT1: rll {{%r[0-9]+}}, {{%r[0-9]+}}, 0([[NEGSHIFT]]) 67 ; CHECK-SHIFT1: rll {{%r[0-9]+}}, {{%r[0-9]+}}, 0([[NEGSHIFT]])
68 ; CHECK-SHIFT1: rll 68 ; CHECK-SHIFT1: rll
69 ; CHECK-SHIFT1: br %r14 69 ; CHECK-SHIFT1: br %r14