Mercurial > hg > Members > tobaru > cbc > CbC_llvm
comparison test/CodeGen/SystemZ/tdc-01.ll @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
1 ; Test the Test Data Class instruction, selected manually via the intrinsic. | |
2 ; | |
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s | |
4 | |
5 declare i32 @llvm.s390.tdc.f32(float, i64) | |
6 declare i32 @llvm.s390.tdc.f64(double, i64) | |
7 declare i32 @llvm.s390.tdc.f128(fp128, i64) | |
8 | |
9 ; Check using as i32 - f32 | |
10 define i32 @f1(float %x) { | |
11 ; CHECK-LABEL: f1 | |
12 ; CHECK: tceb %f0, 123 | |
13 ; CHECK: ipm %r2 | |
14 ; CHECK: srl %r2, 28 | |
15 %res = call i32 @llvm.s390.tdc.f32(float %x, i64 123) | |
16 ret i32 %res | |
17 } | |
18 | |
19 ; Check using as i32 - f64 | |
20 define i32 @f2(double %x) { | |
21 ; CHECK-LABEL: f2 | |
22 ; CHECK: tcdb %f0, 123 | |
23 ; CHECK: ipm %r2 | |
24 ; CHECK: srl %r2, 28 | |
25 %res = call i32 @llvm.s390.tdc.f64(double %x, i64 123) | |
26 ret i32 %res | |
27 } | |
28 | |
29 ; Check using as i32 - f128 | |
30 define i32 @f3(fp128 %x) { | |
31 ; CHECK-LABEL: f3 | |
32 ; CHECK: ld %f0, 0(%r2) | |
33 ; CHECK: ld %f2, 8(%r2) | |
34 ; CHECK: tcxb %f0, 123 | |
35 ; CHECK: ipm %r2 | |
36 ; CHECK: srl %r2, 28 | |
37 %res = call i32 @llvm.s390.tdc.f128(fp128 %x, i64 123) | |
38 ret i32 %res | |
39 } | |
40 | |
41 declare void @g() | |
42 | |
43 ; Check branch | |
44 define void @f4(float %x) { | |
45 ; CHECK-LABEL: f4 | |
46 ; CHECK: tceb %f0, 123 | |
47 ; CHECK: jgl g | |
48 ; CHECK: br %r14 | |
49 %res = call i32 @llvm.s390.tdc.f32(float %x, i64 123) | |
50 %cond = icmp ne i32 %res, 0 | |
51 br i1 %cond, label %call, label %exit | |
52 | |
53 call: | |
54 tail call void @g() | |
55 br label %exit | |
56 | |
57 exit: | |
58 ret void | |
59 } | |
60 | |
61 ; Check branch negated | |
62 define void @f5(float %x) { | |
63 ; CHECK-LABEL: f5 | |
64 ; CHECK: tceb %f0, 123 | |
65 ; CHECK: jge g | |
66 ; CHECK: br %r14 | |
67 %res = call i32 @llvm.s390.tdc.f32(float %x, i64 123) | |
68 %cond = icmp eq i32 %res, 0 | |
69 br i1 %cond, label %call, label %exit | |
70 | |
71 call: | |
72 tail call void @g() | |
73 br label %exit | |
74 | |
75 exit: | |
76 ret void | |
77 } | |
78 | |
79 ; Check non-const mask | |
80 define void @f6(float %x, i64 %y) { | |
81 ; CHECK-LABEL: f6 | |
82 ; CHECK: tceb %f0, 0(%r2) | |
83 ; CHECK: jge g | |
84 ; CHECK: br %r14 | |
85 %res = call i32 @llvm.s390.tdc.f32(float %x, i64 %y) | |
86 %cond = icmp eq i32 %res, 0 | |
87 br i1 %cond, label %call, label %exit | |
88 | |
89 call: | |
90 tail call void @g() | |
91 br label %exit | |
92 | |
93 exit: | |
94 ret void | |
95 } |