1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test that basic 128-bit integer operations assemble as expected. 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 6*9880d681SAndroid Build Coastguard Workertarget triple = "wasm32-unknown-unknown" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdeclare i128 @llvm.ctlz.i128(i128, i1) 9*9880d681SAndroid Build Coastguard Workerdeclare i128 @llvm.cttz.i128(i128, i1) 10*9880d681SAndroid Build Coastguard Workerdeclare i128 @llvm.ctpop.i128(i128) 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add128: 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 14*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 15*9880d681SAndroid Build Coastguard Worker; CHECK: i64.add 16*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 17*9880d681SAndroid Build Coastguard Worker; CHECK: i64.add 18*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 20*9880d681SAndroid Build Coastguard Workerdefine i128 @add128(i128 %x, i128 %y) { 21*9880d681SAndroid Build Coastguard Worker %a = add i128 %x, %y 22*9880d681SAndroid Build Coastguard Worker ret i128 %a 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sub128: 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 27*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 28*9880d681SAndroid Build Coastguard Worker; CHECK: i64.sub 29*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 30*9880d681SAndroid Build Coastguard Worker; CHECK: i64.sub 31*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 33*9880d681SAndroid Build Coastguard Workerdefine i128 @sub128(i128 %x, i128 %y) { 34*9880d681SAndroid Build Coastguard Worker %a = sub i128 %x, %y 35*9880d681SAndroid Build Coastguard Worker ret i128 %a 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mul128: 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 40*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 41*9880d681SAndroid Build Coastguard Worker; CHECK: call __multi3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 42*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 43*9880d681SAndroid Build Coastguard Workerdefine i128 @mul128(i128 %x, i128 %y) { 44*9880d681SAndroid Build Coastguard Worker %a = mul i128 %x, %y 45*9880d681SAndroid Build Coastguard Worker ret i128 %a 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sdiv128: 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 50*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 51*9880d681SAndroid Build Coastguard Worker; CHECK: call __divti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 52*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 53*9880d681SAndroid Build Coastguard Workerdefine i128 @sdiv128(i128 %x, i128 %y) { 54*9880d681SAndroid Build Coastguard Worker %a = sdiv i128 %x, %y 55*9880d681SAndroid Build Coastguard Worker ret i128 %a 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: udiv128: 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 60*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 61*9880d681SAndroid Build Coastguard Worker; CHECK: call __udivti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 62*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 63*9880d681SAndroid Build Coastguard Workerdefine i128 @udiv128(i128 %x, i128 %y) { 64*9880d681SAndroid Build Coastguard Worker %a = udiv i128 %x, %y 65*9880d681SAndroid Build Coastguard Worker ret i128 %a 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srem128: 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 70*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 71*9880d681SAndroid Build Coastguard Worker; CHECK: call __modti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 72*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 73*9880d681SAndroid Build Coastguard Workerdefine i128 @srem128(i128 %x, i128 %y) { 74*9880d681SAndroid Build Coastguard Worker %a = srem i128 %x, %y 75*9880d681SAndroid Build Coastguard Worker ret i128 %a 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: urem128: 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 80*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 81*9880d681SAndroid Build Coastguard Worker; CHECK: call __umodti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 82*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 83*9880d681SAndroid Build Coastguard Workerdefine i128 @urem128(i128 %x, i128 %y) { 84*9880d681SAndroid Build Coastguard Worker %a = urem i128 %x, %y 85*9880d681SAndroid Build Coastguard Worker ret i128 %a 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and128: 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 90*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 91*9880d681SAndroid Build Coastguard Worker; CHECK: i64.and 92*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 93*9880d681SAndroid Build Coastguard Worker; CHECK: i64.and 94*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 96*9880d681SAndroid Build Coastguard Workerdefine i128 @and128(i128 %x, i128 %y) { 97*9880d681SAndroid Build Coastguard Worker %a = and i128 %x, %y 98*9880d681SAndroid Build Coastguard Worker ret i128 %a 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or128: 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 103*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 104*9880d681SAndroid Build Coastguard Worker; CHECK: i64.or 105*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 106*9880d681SAndroid Build Coastguard Worker; CHECK: i64.or 107*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 109*9880d681SAndroid Build Coastguard Workerdefine i128 @or128(i128 %x, i128 %y) { 110*9880d681SAndroid Build Coastguard Worker %a = or i128 %x, %y 111*9880d681SAndroid Build Coastguard Worker ret i128 %a 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor128: 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 116*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 117*9880d681SAndroid Build Coastguard Worker; CHECK: i64.xor 118*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 119*9880d681SAndroid Build Coastguard Worker; CHECK: i64.xor 120*9880d681SAndroid Build Coastguard Worker; CHECK: i64.store 121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 122*9880d681SAndroid Build Coastguard Workerdefine i128 @xor128(i128 %x, i128 %y) { 123*9880d681SAndroid Build Coastguard Worker %a = xor i128 %x, %y 124*9880d681SAndroid Build Coastguard Worker ret i128 %a 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl128: 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 129*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 130*9880d681SAndroid Build Coastguard Worker; CHECK: call __ashlti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 131*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 132*9880d681SAndroid Build Coastguard Workerdefine i128 @shl128(i128 %x, i128 %y) { 133*9880d681SAndroid Build Coastguard Worker %a = shl i128 %x, %y 134*9880d681SAndroid Build Coastguard Worker ret i128 %a 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shr128: 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 139*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 140*9880d681SAndroid Build Coastguard Worker; CHECK: call __lshrti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 141*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 142*9880d681SAndroid Build Coastguard Workerdefine i128 @shr128(i128 %x, i128 %y) { 143*9880d681SAndroid Build Coastguard Worker %a = lshr i128 %x, %y 144*9880d681SAndroid Build Coastguard Worker ret i128 %a 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sar128: 148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 149*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 150*9880d681SAndroid Build Coastguard Worker; CHECK: call __ashrti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 151*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 152*9880d681SAndroid Build Coastguard Workerdefine i128 @sar128(i128 %x, i128 %y) { 153*9880d681SAndroid Build Coastguard Worker %a = ashr i128 %x, %y 154*9880d681SAndroid Build Coastguard Worker ret i128 %a 155*9880d681SAndroid Build Coastguard Worker} 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clz128: 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64{{$}} 159*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 160*9880d681SAndroid Build Coastguard Worker; CHECK: i64.clz 161*9880d681SAndroid Build Coastguard Worker; CHECK: i64.clz 162*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 163*9880d681SAndroid Build Coastguard Workerdefine i128 @clz128(i128 %x) { 164*9880d681SAndroid Build Coastguard Worker %a = call i128 @llvm.ctlz.i128(i128 %x, i1 false) 165*9880d681SAndroid Build Coastguard Worker ret i128 %a 166*9880d681SAndroid Build Coastguard Worker} 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clz128_zero_undef: 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64{{$}} 170*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 171*9880d681SAndroid Build Coastguard Worker; CHECK: i64.clz 172*9880d681SAndroid Build Coastguard Worker; CHECK: i64.clz 173*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 174*9880d681SAndroid Build Coastguard Workerdefine i128 @clz128_zero_undef(i128 %x) { 175*9880d681SAndroid Build Coastguard Worker %a = call i128 @llvm.ctlz.i128(i128 %x, i1 true) 176*9880d681SAndroid Build Coastguard Worker ret i128 %a 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ctz128: 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64{{$}} 181*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 182*9880d681SAndroid Build Coastguard Worker; CHECK: i64.ctz 183*9880d681SAndroid Build Coastguard Worker; CHECK: i64.ctz 184*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 185*9880d681SAndroid Build Coastguard Workerdefine i128 @ctz128(i128 %x) { 186*9880d681SAndroid Build Coastguard Worker %a = call i128 @llvm.cttz.i128(i128 %x, i1 false) 187*9880d681SAndroid Build Coastguard Worker ret i128 %a 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ctz128_zero_undef: 191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64{{$}} 192*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 193*9880d681SAndroid Build Coastguard Worker; CHECK: i64.ctz 194*9880d681SAndroid Build Coastguard Worker; CHECK: i64.ctz 195*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 196*9880d681SAndroid Build Coastguard Workerdefine i128 @ctz128_zero_undef(i128 %x) { 197*9880d681SAndroid Build Coastguard Worker %a = call i128 @llvm.cttz.i128(i128 %x, i1 true) 198*9880d681SAndroid Build Coastguard Worker ret i128 %a 199*9880d681SAndroid Build Coastguard Worker} 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: popcnt128: 202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64{{$}} 203*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 204*9880d681SAndroid Build Coastguard Worker; CHECK: i64.popcnt 205*9880d681SAndroid Build Coastguard Worker; CHECK: i64.popcnt 206*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 207*9880d681SAndroid Build Coastguard Workerdefine i128 @popcnt128(i128 %x) { 208*9880d681SAndroid Build Coastguard Worker %a = call i128 @llvm.ctpop.i128(i128 %x) 209*9880d681SAndroid Build Coastguard Worker ret i128 %a 210*9880d681SAndroid Build Coastguard Worker} 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: eqz128: 213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i64, i64{{$}} 214*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 215*9880d681SAndroid Build Coastguard Worker; CHECK: i64.or 216*9880d681SAndroid Build Coastguard Worker; CHECK: i64.eqz 217*9880d681SAndroid Build Coastguard Worker; CHECK: return $ 218*9880d681SAndroid Build Coastguard Workerdefine i32 @eqz128(i128 %x) { 219*9880d681SAndroid Build Coastguard Worker %a = icmp eq i128 %x, 0 220*9880d681SAndroid Build Coastguard Worker %b = zext i1 %a to i32 221*9880d681SAndroid Build Coastguard Worker ret i32 %b 222*9880d681SAndroid Build Coastguard Worker} 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: rotl: 225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 226*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 227*9880d681SAndroid Build Coastguard Worker; CHECK: call __ashlti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 228*9880d681SAndroid Build Coastguard Worker; CHECK: call __lshrti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 229*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 230*9880d681SAndroid Build Coastguard Workerdefine i128 @rotl(i128 %x, i128 %y) { 231*9880d681SAndroid Build Coastguard Worker %z = sub i128 128, %y 232*9880d681SAndroid Build Coastguard Worker %b = shl i128 %x, %y 233*9880d681SAndroid Build Coastguard Worker %c = lshr i128 %x, %z 234*9880d681SAndroid Build Coastguard Worker %d = or i128 %b, %c 235*9880d681SAndroid Build Coastguard Worker ret i128 %d 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: masked_rotl: 239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 240*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 241*9880d681SAndroid Build Coastguard Worker; CHECK: call __ashlti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 242*9880d681SAndroid Build Coastguard Worker; CHECK: call __lshrti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 243*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 244*9880d681SAndroid Build Coastguard Workerdefine i128 @masked_rotl(i128 %x, i128 %y) { 245*9880d681SAndroid Build Coastguard Worker %a = and i128 %y, 127 246*9880d681SAndroid Build Coastguard Worker %z = sub i128 128, %a 247*9880d681SAndroid Build Coastguard Worker %b = shl i128 %x, %a 248*9880d681SAndroid Build Coastguard Worker %c = lshr i128 %x, %z 249*9880d681SAndroid Build Coastguard Worker %d = or i128 %b, %c 250*9880d681SAndroid Build Coastguard Worker ret i128 %d 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: rotr: 254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 255*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 256*9880d681SAndroid Build Coastguard Worker; CHECK: call __lshrti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 257*9880d681SAndroid Build Coastguard Worker; CHECK: call __ashlti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 258*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 259*9880d681SAndroid Build Coastguard Workerdefine i128 @rotr(i128 %x, i128 %y) { 260*9880d681SAndroid Build Coastguard Worker %z = sub i128 128, %y 261*9880d681SAndroid Build Coastguard Worker %b = lshr i128 %x, %y 262*9880d681SAndroid Build Coastguard Worker %c = shl i128 %x, %z 263*9880d681SAndroid Build Coastguard Worker %d = or i128 %b, %c 264*9880d681SAndroid Build Coastguard Worker ret i128 %d 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: masked_rotr: 268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64, i64, i64, i64{{$}} 269*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .result 270*9880d681SAndroid Build Coastguard Worker; CHECK: call __lshrti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 271*9880d681SAndroid Build Coastguard Worker; CHECK: call __ashlti3@FUNCTION, ${{.+}}, ${{.+}}, ${{.+}}, ${{.+}}{{$}} 272*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 273*9880d681SAndroid Build Coastguard Workerdefine i128 @masked_rotr(i128 %x, i128 %y) { 274*9880d681SAndroid Build Coastguard Worker %a = and i128 %y, 127 275*9880d681SAndroid Build Coastguard Worker %z = sub i128 128, %a 276*9880d681SAndroid Build Coastguard Worker %b = lshr i128 %x, %a 277*9880d681SAndroid Build Coastguard Worker %c = shl i128 %x, %z 278*9880d681SAndroid Build Coastguard Worker %d = or i128 %b, %c 279*9880d681SAndroid Build Coastguard Worker ret i128 %d 280*9880d681SAndroid Build Coastguard Worker} 281