Mercurial > hg > CbC > CbC_llvm
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 |