brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · b6c12ca Raw
164 lines · plain
1; Test the Test Data Class instruction logic operation conversion from2; compares.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6declare half @llvm.fabs.f16(half)7declare float @llvm.fabs.f32(float)8declare double @llvm.fabs.f64(double)9declare fp128 @llvm.fabs.f128(fp128)10 11; Compare with 0 (unworthy)12define i32 @f0(half %x) {13; CHECK-LABEL: f014; CHECK-NOT: tceb15; CHECK: brasl %r14, __extendhfsf2@PLT16; CHECK: ltebr {{%f[0-9]+}}, %f017; CHECK-NOT: tceb18  %res = fcmp ugt half %x, 0.019  %xres = zext i1 %res to i3220  ret i32 %xres21}22 23; Compare with 0 (unworthy)24define i32 @f1(float %x) {25; CHECK-LABEL: f126; CHECK-NOT: tceb27; CHECK: ltebr {{%f[0-9]+}}, %f028; CHECK-NOT: tceb29  %res = fcmp ugt float %x, 0.030  %xres = zext i1 %res to i3231  ret i32 %xres32}33 34; Compare fabs with 0 (unworthy)35define i32 @f2(float %x) {36; CHECK-LABEL: f237; CHECK-NOT: tceb38; CHECK: lpebr {{%f[0-9]+}}, %f039; CHECK-NOT: tceb40  %y = call float @llvm.fabs.f32(float %x)41  %res = fcmp ugt float %y, 0.042  %xres = zext i1 %res to i3243  ret i32 %xres44}45 46; Compare with inf (unworthy)47define i32 @f3(float %x) {48; CHECK-LABEL: f349; CHECK-NOT: tceb50; CHECK: ceb %f0, 0(%r{{[0-9]+}})51; CHECK-NOT: tceb52  %res = fcmp ult float %x, 0x7ff000000000000053  %xres = zext i1 %res to i3254  ret i32 %xres55}56 57; Compare fabs with inf58define i32 @f4_half(half %x) {59; CHECK-LABEL: f4_half:60; CHECK: brasl %r14, __extendhfsf2@PLT61; CHECK: tceb %f0, 404762  %y = call half @llvm.fabs.f16(half %x)63  %res = fcmp ult half %y, 0x7ff000000000000064  %xres = zext i1 %res to i3265  ret i32 %xres66}67 68; Compare fabs with inf69define i32 @f4(float %x) {70; CHECK-LABEL: f4:71; CHECK: tceb %f0, 404772  %y = call float @llvm.fabs.f32(float %x)73  %res = fcmp ult float %y, 0x7ff000000000000074  %xres = zext i1 %res to i3275  ret i32 %xres76}77 78; Compare with minnorm (unworthy)79define i32 @f5(float %x) {80; CHECK-LABEL: f581; CHECK-NOT: tceb82; CHECK: ceb %f0, 0(%r{{[0-9]+}})83; CHECK-NOT: tceb84  %res = fcmp ult float %x, 0x381000000000000085  %xres = zext i1 %res to i3286  ret i32 %xres87}88 89; Compare fabs with minnorm90define i32 @f6(float %x) {91; CHECK-LABEL: f692; CHECK: tceb %f0, 327993  %y = call float @llvm.fabs.f32(float %x)94  %res = fcmp ult float %y, 0x381000000000000095  %xres = zext i1 %res to i3296  ret i32 %xres97}98 99; Compare fabs with minnorm, unsupported condition100define i32 @f7(float %x) {101; CHECK-LABEL: f7102; CHECK-NOT: tceb103; CHECK: lpdfr [[REG:%f[0-9]+]], %f0104; CHECK: ceb [[REG]], 0(%r{{[0-9]+}})105; CHECK-NOT: tceb106  %y = call float @llvm.fabs.f32(float %x)107  %res = fcmp ugt float %y, 0x3810000000000000108  %xres = zext i1 %res to i32109  ret i32 %xres110}111 112; Compare fabs with unsupported constant113define i32 @f8(float %x) {114; CHECK-LABEL: f8115; CHECK-NOT: tceb116; CHECK: lpdfr [[REG:%f[0-9]+]], %f0117; CHECK: ceb [[REG]], 0(%r{{[0-9]+}})118; CHECK-NOT: tceb119  %y = call float @llvm.fabs.f32(float %x)120  %res = fcmp ult float %y, 0x3ff0000000000000121  %xres = zext i1 %res to i32122  ret i32 %xres123}124 125; Compare fabs with minnorm - double126define i32 @f9(double %x) {127; CHECK-LABEL: f9128; CHECK: tcdb %f0, 3279129  %y = call double @llvm.fabs.f64(double %x)130  %res = fcmp ult double %y, 0x0010000000000000131  %xres = zext i1 %res to i32132  ret i32 %xres133}134 135; Compare fabs with minnorm - long double136define i32 @f10(fp128 %x) {137; CHECK-LABEL: f10138; CHECK: tcxb %f0, 3279139  %y = call fp128 @llvm.fabs.f128(fp128 %x)140  %res = fcmp ult fp128 %y, 0xL00000000000000000001000000000000141  %xres = zext i1 %res to i32142  ret i32 %xres143}144 145; Compare fabs for one with inf - clang's isfinite146define i32 @f11(double %x) {147; CHECK-LABEL: f11148; CHECK: tcdb %f0, 4032149  %y = call double @llvm.fabs.f64(double %x)150  %res = fcmp one double %y, 0x7ff0000000000000151  %xres = zext i1 %res to i32152  ret i32 %xres153}154 155; Compare fabs for oeq with inf - clang's isinf156define i32 @f12(double %x) {157; CHECK-LABEL: f12158; CHECK: tcdb %f0, 48159  %y = call double @llvm.fabs.f64(double %x)160  %res = fcmp oeq double %y, 0x7ff0000000000000161  %xres = zext i1 %res to i32162  ret i32 %xres163}164