1; Test 64-bit ORs in which the second operand is constant. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4 5; Check the lowest useful OILL value. 6define i64 @f1(i64 %a) { 7; CHECK-LABEL: f1: 8; CHECK: oill %r2, 1 9; CHECK: br %r14 10 %or = or i64 %a, 1 11 ret i64 %or 12} 13 14; Check the high end of the OILL range. 15define i64 @f2(i64 %a) { 16; CHECK-LABEL: f2: 17; CHECK: oill %r2, 65535 18; CHECK: br %r14 19 %or = or i64 %a, 65535 20 ret i64 %or 21} 22 23; Check the lowest useful OILH value, which is the next value up. 24define i64 @f3(i64 %a) { 25; CHECK-LABEL: f3: 26; CHECK: oilh %r2, 1 27; CHECK: br %r14 28 %or = or i64 %a, 65536 29 ret i64 %or 30} 31 32; Check the lowest useful OILF value, which is the next value up again. 33define i64 @f4(i64 %a) { 34; CHECK-LABEL: f4: 35; CHECK: oilf %r2, 4294901759 36; CHECK: br %r14 37 %or = or i64 %a, 4294901759 38 ret i64 %or 39} 40 41; Check the high end of the OILH range. 42define i64 @f5(i64 %a) { 43; CHECK-LABEL: f5: 44; CHECK: oilh %r2, 65535 45; CHECK: br %r14 46 %or = or i64 %a, 4294901760 47 ret i64 %or 48} 49 50; Check the high end of the OILF range. 51define i64 @f6(i64 %a) { 52; CHECK-LABEL: f6: 53; CHECK: oilf %r2, 4294967295 54; CHECK: br %r14 55 %or = or i64 %a, 4294967295 56 ret i64 %or 57} 58 59; Check the lowest useful OIHL value, which is the next value up. 60define i64 @f7(i64 %a) { 61; CHECK-LABEL: f7: 62; CHECK: oihl %r2, 1 63; CHECK: br %r14 64 %or = or i64 %a, 4294967296 65 ret i64 %or 66} 67 68; Check the next value up again, which must use two ORs. 69define i64 @f8(i64 %a) { 70; CHECK-LABEL: f8: 71; CHECK: oihl %r2, 1 72; CHECK: oill %r2, 1 73; CHECK: br %r14 74 %or = or i64 %a, 4294967297 75 ret i64 %or 76} 77 78; Check the high end of the OILL range. 79define i64 @f9(i64 %a) { 80; CHECK-LABEL: f9: 81; CHECK: oihl %r2, 1 82; CHECK: oill %r2, 65535 83; CHECK: br %r14 84 %or = or i64 %a, 4295032831 85 ret i64 %or 86} 87 88; Check the next value up, which must use OILH 89define i64 @f10(i64 %a) { 90; CHECK-LABEL: f10: 91; CHECK: oihl %r2, 1 92; CHECK: oilh %r2, 1 93; CHECK: br %r14 94 %or = or i64 %a, 4295032832 95 ret i64 %or 96} 97 98; Check the next value up again, which must use OILF 99define i64 @f11(i64 %a) { 100; CHECK-LABEL: f11: 101; CHECK: oihl %r2, 1 102; CHECK: oilf %r2, 65537 103; CHECK: br %r14 104 %or = or i64 %a, 4295032833 105 ret i64 %or 106} 107 108; Check the high end of the OIHL range. 109define i64 @f12(i64 %a) { 110; CHECK-LABEL: f12: 111; CHECK: oihl %r2, 65535 112; CHECK: br %r14 113 %or = or i64 %a, 281470681743360 114 ret i64 %or 115} 116 117; Check a combination of the high end of the OIHL range and the high end 118; of the OILF range. 119define i64 @f13(i64 %a) { 120; CHECK-LABEL: f13: 121; CHECK: oihl %r2, 65535 122; CHECK: oilf %r2, 4294967295 123; CHECK: br %r14 124 %or = or i64 %a, 281474976710655 125 ret i64 %or 126} 127 128; Check the lowest useful OIHH value. 129define i64 @f14(i64 %a) { 130; CHECK-LABEL: f14: 131; CHECK: oihh %r2, 1 132; CHECK: br %r14 133 %or = or i64 %a, 281474976710656 134 ret i64 %or 135} 136 137; Check the next value up, which needs two ORs. 138define i64 @f15(i64 %a) { 139; CHECK-LABEL: f15: 140; CHECK: oihh %r2, 1 141; CHECK: oill %r2, 1 142; CHECK: br %r14 143 %or = or i64 %a, 281474976710657 144 ret i64 %or 145} 146 147; Check the lowest useful OIHF value. 148define i64 @f16(i64 %a) { 149; CHECK-LABEL: f16: 150; CHECK: oihf %r2, 65537 151; CHECK: br %r14 152 %or = or i64 %a, 281479271677952 153 ret i64 %or 154} 155 156; Check the high end of the OIHH range. 157define i64 @f17(i64 %a) { 158; CHECK-LABEL: f17: 159; CHECK: oihh %r2, 65535 160; CHECK: br %r14 161 %or = or i64 %a, 18446462598732840960 162 ret i64 %or 163} 164 165; Check the high end of the OIHF range. 166define i64 @f18(i64 %a) { 167; CHECK-LABEL: f18: 168; CHECK: oihf %r2, 4294967295 169; CHECK: br %r14 170 %or = or i64 %a, -4294967296 171 ret i64 %or 172} 173 174; Check the highest useful OR value. 175define i64 @f19(i64 %a) { 176; CHECK-LABEL: f19: 177; CHECK: oihf %r2, 4294967295 178; CHECK: oilf %r2, 4294967294 179; CHECK: br %r14 180 %or = or i64 %a, -2 181 ret i64 %or 182} 183