brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · a0c090f Raw
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