[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / SystemZ / tdc-01.ll
blob052d895b798f6b1bb8b5a7e4a4b8abe96f4378cf
1 ; Test the Test Data Class instruction, selected manually via the intrinsic.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
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)
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
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
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
41 declare void @g()
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
53 call:
54   tail call void @g()
55   br label %exit
57 exit:
58   ret void
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
71 call:
72   tail call void @g()
73   br label %exit
75 exit:
76   ret void
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
89 call:
90   tail call void @g()
91   br label %exit
93 exit:
94   ret void