1; Test all condition-code masks that are relevant for CGRJ. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4 5declare i64 @foo() 6 7; Test EQ. 8define void @f1(i64 %target) { 9; CHECK-LABEL: f1: 10; CHECK: .cfi_def_cfa_offset 11; CHECK: .L[[LABEL:.*]]: 12; CHECK: cgrje %r2, {{%r[0-9]+}}, .L[[LABEL]] 13 br label %loop 14loop: 15 %val = call i64 @foo() 16 %cond = icmp eq i64 %val, %target 17 br i1 %cond, label %loop, label %exit 18exit: 19 ret void 20} 21 22; Test NE. 23define void @f2(i64 %target) { 24; CHECK-LABEL: f2: 25; CHECK: .cfi_def_cfa_offset 26; CHECK: .L[[LABEL:.*]]: 27; CHECK: cgrjlh %r2, {{%r[0-9]+}}, .L[[LABEL]] 28 br label %loop 29loop: 30 %val = call i64 @foo() 31 %cond = icmp ne i64 %val, %target 32 br i1 %cond, label %loop, label %exit 33exit: 34 ret void 35} 36 37; Test SLE. 38define void @f3(i64 %target) { 39; CHECK-LABEL: f3: 40; CHECK: .cfi_def_cfa_offset 41; CHECK: .L[[LABEL:.*]]: 42; CHECK: cgrjle %r2, {{%r[0-9]+}}, .L[[LABEL]] 43 br label %loop 44loop: 45 %val = call i64 @foo() 46 %cond = icmp sle i64 %val, %target 47 br i1 %cond, label %loop, label %exit 48exit: 49 ret void 50} 51 52; Test SLT. 53define void @f4(i64 %target) { 54; CHECK-LABEL: f4: 55; CHECK: .cfi_def_cfa_offset 56; CHECK: .L[[LABEL:.*]]: 57; CHECK: cgrjl %r2, {{%r[0-9]+}}, .L[[LABEL]] 58 br label %loop 59loop: 60 %val = call i64 @foo() 61 %cond = icmp slt i64 %val, %target 62 br i1 %cond, label %loop, label %exit 63exit: 64 ret void 65} 66 67; Test SGT. 68define void @f5(i64 %target) { 69; CHECK-LABEL: f5: 70; CHECK: .cfi_def_cfa_offset 71; CHECK: .L[[LABEL:.*]]: 72; CHECK: cgrjh %r2, {{%r[0-9]+}}, .L[[LABEL]] 73 br label %loop 74loop: 75 %val = call i64 @foo() 76 %cond = icmp sgt i64 %val, %target 77 br i1 %cond, label %loop, label %exit 78exit: 79 ret void 80} 81 82; Test SGE. 83define void @f6(i64 %target) { 84; CHECK-LABEL: f6: 85; CHECK: .cfi_def_cfa_offset 86; CHECK: .L[[LABEL:.*]]: 87; CHECK: cgrjhe %r2, {{%r[0-9]+}}, .L[[LABEL]] 88 br label %loop 89loop: 90 %val = call i64 @foo() 91 %cond = icmp sge i64 %val, %target 92 br i1 %cond, label %loop, label %exit 93exit: 94 ret void 95} 96 97; Test a vector of 0/-1 results for i32 EQ. 98define i64 @f7(i64 %a, i64 %b) { 99; CHECK-LABEL: f7: 100; CHECK: ipm [[REG:%r[0-5]]] 101; CHECK: afi [[REG]], -268435456 102; CHECK: sra [[REG]], 31 103; CHECK: br %r14 104 %avec = bitcast i64 %a to <2 x i32> 105 %bvec = bitcast i64 %b to <2 x i32> 106 %cmp = icmp eq <2 x i32> %avec, %bvec 107 %ext = sext <2 x i1> %cmp to <2 x i32> 108 %ret = bitcast <2 x i32> %ext to i64 109 ret i64 %ret 110} 111 112; Test a vector of 0/-1 results for i32 NE. 113define i64 @f8(i64 %a, i64 %b) { 114; CHECK-LABEL: f8: 115; CHECK: ipm [[REG:%r[0-5]]] 116; CHECK: afi [[REG]], 1879048192 117; CHECK: sra [[REG]], 31 118; CHECK: br %r14 119 %avec = bitcast i64 %a to <2 x i32> 120 %bvec = bitcast i64 %b to <2 x i32> 121 %cmp = icmp ne <2 x i32> %avec, %bvec 122 %ext = sext <2 x i1> %cmp to <2 x i32> 123 %ret = bitcast <2 x i32> %ext to i64 124 ret i64 %ret 125} 126 127; Test a vector of 0/-1 results for i64 EQ. 128define void @f9(i64 %a, i64 %b, <2 x i64> *%dest) { 129; CHECK-LABEL: f9: 130; CHECK: ipm [[REG:%r[0-5]]] 131; CHECK: afi [[REG]], -268435456 132; CHECK: sllg [[REG2:%r[0-5]]], [[REG]], 32 133; CHECK: srag {{%r[0-5]}}, [[REG2]], 63 134; CHECK: br %r14 135 %avec = bitcast i64 %a to <2 x i32> 136 %bvec = bitcast i64 %b to <2 x i32> 137 %cmp = icmp eq <2 x i32> %avec, %bvec 138 %ext = sext <2 x i1> %cmp to <2 x i64> 139 store <2 x i64> %ext, <2 x i64> *%dest 140 ret void 141} 142 143; Test a vector of 0/-1 results for i64 NE. 144define void @f10(i64 %a, i64 %b, <2 x i64> *%dest) { 145; CHECK-LABEL: f10: 146; CHECK: ipm [[REG:%r[0-5]]] 147; CHECK: afi [[REG]], 1879048192 148; CHECK: sllg [[REG2:%r[0-5]]], [[REG]], 32 149; CHECK: srag {{%r[0-5]}}, [[REG2]], 63 150; CHECK: br %r14 151 %avec = bitcast i64 %a to <2 x i32> 152 %bvec = bitcast i64 %b to <2 x i32> 153 %cmp = icmp ne <2 x i32> %avec, %bvec 154 %ext = sext <2 x i1> %cmp to <2 x i64> 155 store <2 x i64> %ext, <2 x i64> *%dest 156 ret void 157} 158