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 }