brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · bcedb3a Raw
122 lines · plain
1; Test SELR and SELGR.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 -verify-machineinstrs | FileCheck %s4 5; Test SELR.6define i32 @f1(i32 %limit, i32 %a, i32 %b) {7; CHECK-LABEL: f1:8; CHECK: clfi %r2, 429; CHECK: selrl %r2, %r3, %r410; CHECK: br %r1411  %cond = icmp ult i32 %limit, 4212  %res = select i1 %cond, i32 %a, i32 %b13  ret i32 %res14}15 16; Test SELGR.17define i64 @f2(i64 %limit, i64 %a, i64 %b) {18; CHECK-LABEL: f2:19; CHECK: clgfi %r2, 4220; CHECK: selgrl %r2, %r3, %r421; CHECK: br %r1422  %cond = icmp ult i64 %limit, 4223  %res = select i1 %cond, i64 %a, i64 %b24  ret i64 %res25}26 27; Test SELR in a case that could use COMPARE AND BRANCH.  We prefer using28; SELR if possible.29define i32 @f3(i32 %limit, i32 %a, i32 %b) {30; CHECK-LABEL: f3:31; CHECK: chi %r2, 4232; CHECK: selre %r2, %r3, %r433; CHECK: br %r1434  %cond = icmp eq i32 %limit, 4235  %res = select i1 %cond, i32 %a, i32 %b36  ret i32 %res37}38 39; ...and again for SELGR.40define i64 @f4(i64 %limit, i64 %a, i64 %b) {41; CHECK-LABEL: f4:42; CHECK: cghi %r2, 4243; CHECK: selgre %r2, %r3, %r444; CHECK: br %r1445  %cond = icmp eq i64 %limit, 4246  %res = select i1 %cond, i64 %a, i64 %b47  ret i64 %res48}49 50; Check that we also get SELR as a result of early if-conversion.51define i32 @f5(i32 %limit, i32 %a, i32 %b) {52; CHECK-LABEL: f5:53; CHECK: clfi %r2, 4154; CHECK: selrh %r2, %r4, %r355; CHECK: br %r1456entry:57  %cond = icmp ult i32 %limit, 4258  br i1 %cond, label %if.then, label %return59 60if.then:61  br label %return62 63return:64  %res = phi i32 [ %a, %if.then ], [ %b, %entry ]65  ret i32 %res66}67 68; ... and likewise for SELGR.69define i64 @f6(i64 %limit, i64 %a, i64 %b) {70; CHECK-LABEL: f6:71; CHECK: clgfi %r2, 4172; CHECK: selgrh %r2, %r4, %r373; CHECK: br %r1474entry:75  %cond = icmp ult i64 %limit, 4276  br i1 %cond, label %if.then, label %return77 78if.then:79  br label %return80 81return:82  %res = phi i64 [ %a, %if.then ], [ %b, %entry ]83  ret i64 %res84}85 86; Check that inverting the condition works as well.87define i32 @f7(i32 %limit, i32 %a, i32 %b) {88; CHECK-LABEL: f7:89; CHECK: clfi %r2, 4190; CHECK: selrh %r2, %r3, %r491; CHECK: br %r1492entry:93  %cond = icmp ult i32 %limit, 4294  br i1 %cond, label %if.then, label %return95 96if.then:97  br label %return98 99return:100  %res = phi i32 [ %b, %if.then ], [ %a, %entry ]101  ret i32 %res102}103 104; ... and likewise for SELGR.105define i64 @f8(i64 %limit, i64 %a, i64 %b) {106; CHECK-LABEL: f8:107; CHECK: clgfi %r2, 41108; CHECK: selgrh %r2, %r3, %r4109; CHECK: br %r14110entry:111  %cond = icmp ult i64 %limit, 42112  br i1 %cond, label %if.then, label %return113 114if.then:115  br label %return116 117return:118  %res = phi i64 [ %b, %if.then ], [ %a, %entry ]119  ret i64 %res120}121 122