108 lines · plain
1; Test the Test Data Class instruction, selected manually via the intrinsic.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5declare i32 @llvm.s390.tdc.f16(half, i64)6declare i32 @llvm.s390.tdc.f32(float, i64)7declare i32 @llvm.s390.tdc.f64(double, i64)8declare i32 @llvm.s390.tdc.f128(fp128, i64)9 10; Check using as i32 - f1611define i32 @f0(half %x) {12; CHECK-LABEL: f013; CHECK: brasl %r14, __extendhfsf2@PLT14; CHECK: tceb %f0, 12315; CHECK: ipm %r216; CHECK: srl %r2, 2817 %res = call i32 @llvm.s390.tdc.f16(half %x, i64 123)18 ret i32 %res19}20 21; Check using as i32 - f3222define i32 @f1(float %x) {23; CHECK-LABEL: f124; CHECK: tceb %f0, 12325; CHECK: ipm %r226; CHECK: srl %r2, 2827 %res = call i32 @llvm.s390.tdc.f32(float %x, i64 123)28 ret i32 %res29}30 31; Check using as i32 - f6432define i32 @f2(double %x) {33; CHECK-LABEL: f234; CHECK: tcdb %f0, 12335; CHECK: ipm %r236; CHECK: srl %r2, 2837 %res = call i32 @llvm.s390.tdc.f64(double %x, i64 123)38 ret i32 %res39}40 41; Check using as i32 - f12842define i32 @f3(fp128 %x) {43; CHECK-LABEL: f344; CHECK: ld %f0, 0(%r2)45; CHECK: ld %f2, 8(%r2)46; CHECK: tcxb %f0, 12347; CHECK: ipm %r248; CHECK: srl %r2, 2849 %res = call i32 @llvm.s390.tdc.f128(fp128 %x, i64 123)50 ret i32 %res51}52 53declare void @g()54 55; Check branch56define void @f4(float %x) {57; CHECK-LABEL: f458; CHECK: tceb %f0, 12359; CHECK: jgl g60; CHECK: br %r1461 %res = call i32 @llvm.s390.tdc.f32(float %x, i64 123)62 %cond = icmp ne i32 %res, 063 br i1 %cond, label %call, label %exit64 65call:66 tail call void @g()67 br label %exit68 69exit:70 ret void71}72 73; Check branch negated74define void @f5(float %x) {75; CHECK-LABEL: f576; CHECK: tceb %f0, 12377; CHECK: jge g78; CHECK: br %r1479 %res = call i32 @llvm.s390.tdc.f32(float %x, i64 123)80 %cond = icmp eq i32 %res, 081 br i1 %cond, label %call, label %exit82 83call:84 tail call void @g()85 br label %exit86 87exit:88 ret void89}90 91; Check non-const mask92define void @f6(float %x, i64 %y) {93; CHECK-LABEL: f694; CHECK: tceb %f0, 0(%r2)95; CHECK: jge g96; CHECK: br %r1497 %res = call i32 @llvm.s390.tdc.f32(float %x, i64 %y)98 %cond = icmp eq i32 %res, 099 br i1 %cond, label %call, label %exit100 101call:102 tail call void @g()103 br label %exit104 105exit:106 ret void107}108