brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 2db86d2 Raw
120 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s4 5;6; Test strict 32-bit square root.7;8 9declare half @llvm.experimental.constrained.sqrt.f16(half, metadata, metadata)10declare float @llvm.experimental.constrained.sqrt.f32(float, metadata, metadata)11 12; Check register square root.13define half @f0(half %val) #0 {14; CHECK-LABEL: f0:15; CHECK:       # %bb.0:16; CHECK:      brasl %r14, __extendhfsf2@PLT17; CHECK-NEXT: sqebr %f0, %f018; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT19; CHECK:      br %r1420  %res = call half @llvm.experimental.constrained.sqrt.f16(21                        half %val,22                        metadata !"round.dynamic",23                        metadata !"fpexcept.strict") #024  ret half %res25}26 27; Check register square root.28define float @f1(float %val) #0 {29; CHECK-LABEL: f1:30; CHECK:       # %bb.0:31; CHECK-NEXT:    sqebr %f0, %f032; CHECK-NEXT:    br %r1433  %res = call float @llvm.experimental.constrained.sqrt.f32(34                        float %val,35                        metadata !"round.dynamic",36                        metadata !"fpexcept.strict") #037  ret float %res38}39 40; Check the low end of the SQEB range.41define float @f2(ptr %ptr) #0 {42; CHECK-LABEL: f2:43; CHECK:       # %bb.0:44; CHECK-NEXT:    sqeb %f0, 0(%r2)45; CHECK-NEXT:    br %r1446  %val = load float, ptr %ptr47  %res = call float @llvm.experimental.constrained.sqrt.f32(48                        float %val,49                        metadata !"round.dynamic",50                        metadata !"fpexcept.strict") #051  ret float %res52}53 54; Check the high end of the aligned SQEB range.55define float @f3(ptr %base) #0 {56; CHECK-LABEL: f3:57; CHECK:       # %bb.0:58; CHECK-NEXT:    sqeb %f0, 4092(%r2)59; CHECK-NEXT:    br %r1460  %ptr = getelementptr float, ptr %base, i64 102361  %val = load float, ptr %ptr62  %res = call float @llvm.experimental.constrained.sqrt.f32(63                        float %val,64                        metadata !"round.dynamic",65                        metadata !"fpexcept.strict") #066  ret float %res67}68 69; Check the next word up, which needs separate address logic.70; Other sequences besides this one would be OK.71define float @f4(ptr %base) #0 {72; CHECK-LABEL: f4:73; CHECK:       # %bb.0:74; CHECK-NEXT:    aghi %r2, 409675; CHECK-NEXT:    sqeb %f0, 0(%r2)76; CHECK-NEXT:    br %r1477  %ptr = getelementptr float, ptr %base, i64 102478  %val = load float, ptr %ptr79  %res = call float @llvm.experimental.constrained.sqrt.f32(80                        float %val,81                        metadata !"round.dynamic",82                        metadata !"fpexcept.strict") #083  ret float %res84}85 86; Check negative displacements, which also need separate address logic.87define float @f5(ptr %base) #0 {88; CHECK-LABEL: f5:89; CHECK:       # %bb.0:90; CHECK-NEXT:    aghi %r2, -491; CHECK-NEXT:    sqeb %f0, 0(%r2)92; CHECK-NEXT:    br %r1493  %ptr = getelementptr float, ptr %base, i64 -194  %val = load float, ptr %ptr95  %res = call float @llvm.experimental.constrained.sqrt.f32(96                        float %val,97                        metadata !"round.dynamic",98                        metadata !"fpexcept.strict") #099  ret float %res100}101 102; Check that SQEB allows indices.103define float @f6(ptr %base, i64 %index) #0 {104; CHECK-LABEL: f6:105; CHECK:       # %bb.0:106; CHECK-NEXT:    sllg %r1, %r3, 2107; CHECK-NEXT:    sqeb %f0, 400(%r1,%r2)108; CHECK-NEXT:    br %r14109  %ptr1 = getelementptr float, ptr %base, i64 %index110  %ptr2 = getelementptr float, ptr %ptr1, i64 100111  %val = load float, ptr %ptr2112  %res = call float @llvm.experimental.constrained.sqrt.f32(113                        float %val,114                        metadata !"round.dynamic",115                        metadata !"fpexcept.strict") #0116  ret float %res117}118 119attributes #0 = { strictfp }120