~ubuntu-branches/ubuntu/trusty/llvm-toolchain-snapshot/trusty-201310232150

« back to all changes in this revision

Viewing changes to test/CodeGen/SystemZ/bswap-02.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-27 15:01:57 UTC
  • mfrom: (0.10.1) (0.9.1) (0.8.1) (0.7.1) (0.6.1) (0.5.2)
  • Revision ID: package-import@ubuntu.com-20130527150157-tdkrsjpuvht7v0qx
Tags: 1:3.4~svn182733-1~exp1
* New snapshot release (3.4 release)
* Add a symlink of libLLVM-3.4.so.1 to usr/lib/llvm-3.4/lib/libLLVM-3.4.so
    to fix make the llvm-config-3.4 --libdir work (Closes: #708677)
  * Various packages rename to allow co installations:
    * libclang1 => libclang1-3.4
    * libclang1-dbg => libclang1-3.4-dbg
    * libclang-dev => libclang-3.4-dev
    * libclang-common-dev => libclang-common-3.4-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; Test 32-bit byteswaps from memory to registers.
 
2
;
 
3
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
 
4
 
 
5
declare i32 @llvm.bswap.i32(i32 %a)
 
6
 
 
7
; Check LRV with no displacement.
 
8
define i32 @f1(i32 *%src) {
 
9
; CHECK: f1:
 
10
; CHECK: lrv %r2, 0(%r2)
 
11
; CHECK: br %r14
 
12
  %a = load i32 *%src
 
13
  %swapped = call i32 @llvm.bswap.i32(i32 %a)
 
14
  ret i32 %swapped
 
15
}
 
16
 
 
17
; Check the high end of the aligned LRV range.
 
18
define i32 @f2(i32 *%src) {
 
19
; CHECK: f2:
 
20
; CHECK: lrv %r2, 524284(%r2)
 
21
; CHECK: br %r14
 
22
  %ptr = getelementptr i32 *%src, i64 131071
 
23
  %a = load i32 *%ptr
 
24
  %swapped = call i32 @llvm.bswap.i32(i32 %a)
 
25
  ret i32 %swapped
 
26
}
 
27
 
 
28
; Check the next word up, which needs separate address logic.
 
29
; Other sequences besides this one would be OK.
 
30
define i32 @f3(i32 *%src) {
 
31
; CHECK: f3:
 
32
; CHECK: agfi %r2, 524288
 
33
; CHECK: lrv %r2, 0(%r2)
 
34
; CHECK: br %r14
 
35
  %ptr = getelementptr i32 *%src, i64 131072
 
36
  %a = load i32 *%ptr
 
37
  %swapped = call i32 @llvm.bswap.i32(i32 %a)
 
38
  ret i32 %swapped
 
39
}
 
40
 
 
41
; Check the high end of the negative aligned LRV range.
 
42
define i32 @f4(i32 *%src) {
 
43
; CHECK: f4:
 
44
; CHECK: lrv %r2, -4(%r2)
 
45
; CHECK: br %r14
 
46
  %ptr = getelementptr i32 *%src, i64 -1
 
47
  %a = load i32 *%ptr
 
48
  %swapped = call i32 @llvm.bswap.i32(i32 %a)
 
49
  ret i32 %swapped
 
50
}
 
51
 
 
52
; Check the low end of the LRV range.
 
53
define i32 @f5(i32 *%src) {
 
54
; CHECK: f5:
 
55
; CHECK: lrv %r2, -524288(%r2)
 
56
; CHECK: br %r14
 
57
  %ptr = getelementptr i32 *%src, i64 -131072
 
58
  %a = load i32 *%ptr
 
59
  %swapped = call i32 @llvm.bswap.i32(i32 %a)
 
60
  ret i32 %swapped
 
61
}
 
62
 
 
63
; Check the next word down, which needs separate address logic.
 
64
; Other sequences besides this one would be OK.
 
65
define i32 @f6(i32 *%src) {
 
66
; CHECK: f6:
 
67
; CHECK: agfi %r2, -524292
 
68
; CHECK: lrv %r2, 0(%r2)
 
69
; CHECK: br %r14
 
70
  %ptr = getelementptr i32 *%src, i64 -131073
 
71
  %a = load i32 *%ptr
 
72
  %swapped = call i32 @llvm.bswap.i32(i32 %a)
 
73
  ret i32 %swapped
 
74
}
 
75
 
 
76
; Check that LRV allows an index.
 
77
define i32 @f7(i64 %src, i64 %index) {
 
78
; CHECK: f7:
 
79
; CHECK: lrv %r2, 524287({{%r3,%r2|%r2,%r3}})
 
80
; CHECK: br %r14
 
81
  %add1 = add i64 %src, %index
 
82
  %add2 = add i64 %add1, 524287
 
83
  %ptr = inttoptr i64 %add2 to i32 *
 
84
  %a = load i32 *%ptr
 
85
  %swapped = call i32 @llvm.bswap.i32(i32 %a)
 
86
  ret i32 %swapped
 
87
}