brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 3f0ec44 Raw
219 lines · plain
1; Test all condition-code masks that are relevant for floating-point2; comparisons.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6define void @f1(ptr %src, float %target) {7; CHECK-LABEL: f1:8; CHECK: .cfi_startproc9; CHECK: .L[[LABEL:.*]]:10; CHECK: ceb %f0, 0(%r2)11; CHECK-NEXT: je .L[[LABEL]]12  br label %loop13loop:14  %val = load volatile float, ptr %src15  %cond = fcmp oeq float %target, %val16  br i1 %cond, label %loop, label %exit17exit:18  ret void19}20 21define void @f2(ptr %src, float %target) {22; CHECK-LABEL: f2:23; CHECK: .cfi_startproc24; CHECK: .L[[LABEL:.*]]:25; CHECK: ceb %f0, 0(%r2)26; CHECK-NEXT: jlh .L[[LABEL]]27  br label %loop28loop:29  %val = load volatile float, ptr %src30  %cond = fcmp one float %target, %val31  br i1 %cond, label %loop, label %exit32exit:33  ret void34}35 36define void @f3(ptr %src, float %target) {37; CHECK-LABEL: f3:38; CHECK: .cfi_startproc39; CHECK: .L[[LABEL:.*]]:40; CHECK: ceb %f0, 0(%r2)41; CHECK-NEXT: jle .L[[LABEL]]42  br label %loop43loop:44  %val = load volatile float, ptr %src45  %cond = fcmp ole float %target, %val46  br i1 %cond, label %loop, label %exit47exit:48  ret void49}50 51define void @f4(ptr %src, float %target) {52; CHECK-LABEL: f4:53; CHECK: .cfi_startproc54; CHECK: .L[[LABEL:.*]]:55; CHECK: ceb %f0, 0(%r2)56; CHECK-NEXT: jl .L[[LABEL]]57  br label %loop58loop:59  %val = load volatile float, ptr %src60  %cond = fcmp olt float %target, %val61  br i1 %cond, label %loop, label %exit62exit:63  ret void64}65 66define void @f5(ptr %src, float %target) {67; CHECK-LABEL: f5:68; CHECK: .cfi_startproc69; CHECK: .L[[LABEL:.*]]:70; CHECK: ceb %f0, 0(%r2)71; CHECK-NEXT: jh .L[[LABEL]]72  br label %loop73loop:74  %val = load volatile float, ptr %src75  %cond = fcmp ogt float %target, %val76  br i1 %cond, label %loop, label %exit77exit:78  ret void79}80 81define void @f6(ptr %src, float %target) {82; CHECK-LABEL: f6:83; CHECK: .cfi_startproc84; CHECK: .L[[LABEL:.*]]:85; CHECK: ceb %f0, 0(%r2)86; CHECK-NEXT: jhe .L[[LABEL]]87  br label %loop88loop:89  %val = load volatile float, ptr %src90  %cond = fcmp oge float %target, %val91  br i1 %cond, label %loop, label %exit92exit:93  ret void94}95 96define void @f7(ptr %src, float %target) {97; CHECK-LABEL: f7:98; CHECK: .cfi_startproc99; CHECK: .L[[LABEL:.*]]:100; CHECK: ceb %f0, 0(%r2)101; CHECK-NEXT: jnlh .L[[LABEL]]102  br label %loop103loop:104  %val = load volatile float, ptr %src105  %cond = fcmp ueq float %target, %val106  br i1 %cond, label %loop, label %exit107exit:108  ret void109}110 111define void @f8(ptr %src, float %target) {112; CHECK-LABEL: f8:113; CHECK: .cfi_startproc114; CHECK: .L[[LABEL:.*]]:115; CHECK: ceb %f0, 0(%r2)116; CHECK-NEXT: jne .L[[LABEL]]117  br label %loop118loop:119  %val = load volatile float, ptr %src120  %cond = fcmp une float %target, %val121  br i1 %cond, label %loop, label %exit122exit:123  ret void124}125 126define void @f9(ptr %src, float %target) {127; CHECK-LABEL: f9:128; CHECK: .cfi_startproc129; CHECK: .L[[LABEL:.*]]:130; CHECK: ceb %f0, 0(%r2)131; CHECK-NEXT: jnh .L[[LABEL]]132  br label %loop133loop:134  %val = load volatile float, ptr %src135  %cond = fcmp ule float %target, %val136  br i1 %cond, label %loop, label %exit137exit:138  ret void139}140 141define void @f10(ptr %src, float %target) {142; CHECK-LABEL: f10:143; CHECK: .cfi_startproc144; CHECK: .L[[LABEL:.*]]:145; CHECK: ceb %f0, 0(%r2)146; CHECK-NEXT: jnhe .L[[LABEL]]147  br label %loop148loop:149  %val = load volatile float, ptr %src150  %cond = fcmp ult float %target, %val151  br i1 %cond, label %loop, label %exit152exit:153  ret void154}155 156define void @f11(ptr %src, float %target) {157; CHECK-LABEL: f11:158; CHECK: .cfi_startproc159; CHECK: .L[[LABEL:.*]]:160; CHECK: ceb %f0, 0(%r2)161; CHECK-NEXT: jnle .L[[LABEL]]162  br label %loop163loop:164  %val = load volatile float, ptr %src165  %cond = fcmp ugt float %target, %val166  br i1 %cond, label %loop, label %exit167exit:168  ret void169}170 171define void @f12(ptr %src, float %target) {172; CHECK-LABEL: f12:173; CHECK: .cfi_startproc174; CHECK: .L[[LABEL:.*]]:175; CHECK: ceb %f0, 0(%r2)176; CHECK-NEXT: jnl .L[[LABEL]]177  br label %loop178loop:179  %val = load volatile float, ptr %src180  %cond = fcmp uge float %target, %val181  br i1 %cond, label %loop, label %exit182exit:183  ret void184}185 186; "jno" == "jump if no overflow", which corresponds to "jump if ordered"187; rather than "jump if not ordered" after a floating-point comparison.188define void @f13(ptr %src, float %target) {189; CHECK-LABEL: f13:190; CHECK: .cfi_startproc191; CHECK: .L[[LABEL:.*]]:192; CHECK: ceb %f0, 0(%r2)193; CHECK-NEXT: jno .L[[LABEL]]194  br label %loop195loop:196  %val = load volatile float, ptr %src197  %cond = fcmp ord float %target, %val198  br i1 %cond, label %loop, label %exit199exit:200  ret void201}202 203; "jo" == "jump if overflow", which corresponds to "jump if not ordered"204; rather than "jump if ordered" after a floating-point comparison.205define void @f14(ptr %src, float %target) {206; CHECK-LABEL: f14:207; CHECK: .cfi_startproc208; CHECK: .L[[LABEL:.*]]:209; CHECK: ceb %f0, 0(%r2)210; CHECK-NEXT: jo .L[[LABEL]]211  br label %loop212loop:213  %val = load volatile float, ptr %src214  %cond = fcmp uno float %target, %val215  br i1 %cond, label %loop, label %exit216exit:217  ret void218}219