1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.x() #0 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test2: 8*9880d681SAndroid Build Coastguard Worker; EG: AND_INT {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 9*9880d681SAndroid Build Coastguard Worker; EG: AND_INT {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 12*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine void @test2(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %in) { 15*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %in, i32 1 16*9880d681SAndroid Build Coastguard Worker %a = load <2 x i32>, <2 x i32> addrspace(1) * %in 17*9880d681SAndroid Build Coastguard Worker %b = load <2 x i32>, <2 x i32> addrspace(1) * %b_ptr 18*9880d681SAndroid Build Coastguard Worker %result = and <2 x i32> %a, %b 19*9880d681SAndroid Build Coastguard Worker store <2 x i32> %result, <2 x i32> addrspace(1)* %out 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test4: 24*9880d681SAndroid Build Coastguard Worker; EG: AND_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 25*9880d681SAndroid Build Coastguard Worker; EG: AND_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 26*9880d681SAndroid Build Coastguard Worker; EG: AND_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 27*9880d681SAndroid Build Coastguard Worker; EG: AND_INT {{\** *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 30*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 31*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 32*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine void @test4(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) { 35*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x i32>, <4 x i32> addrspace(1)* %in, i32 1 36*9880d681SAndroid Build Coastguard Worker %a = load <4 x i32>, <4 x i32> addrspace(1) * %in 37*9880d681SAndroid Build Coastguard Worker %b = load <4 x i32>, <4 x i32> addrspace(1) * %b_ptr 38*9880d681SAndroid Build Coastguard Worker %result = and <4 x i32> %a, %b 39*9880d681SAndroid Build Coastguard Worker store <4 x i32> %result, <4 x i32> addrspace(1)* %out 40*9880d681SAndroid Build Coastguard Worker ret void 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_i32: 44*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 45*9880d681SAndroid Build Coastguard Workerdefine void @s_and_i32(i32 addrspace(1)* %out, i32 %a, i32 %b) { 46*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, %b 47*9880d681SAndroid Build Coastguard Worker store i32 %and, i32 addrspace(1)* %out, align 4 48*9880d681SAndroid Build Coastguard Worker ret void 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_constant_i32: 52*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s{{[0-9]+}}, s{{[0-9]+}}, 0x12d687 53*9880d681SAndroid Build Coastguard Workerdefine void @s_and_constant_i32(i32 addrspace(1)* %out, i32 %a) { 54*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, 1234567 55*9880d681SAndroid Build Coastguard Worker store i32 %and, i32 addrspace(1)* %out, align 4 56*9880d681SAndroid Build Coastguard Worker ret void 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; FIXME: We should really duplicate the constant so that the SALU use 60*9880d681SAndroid Build Coastguard Worker; can fold into the s_and_b32 and the VALU one is materialized 61*9880d681SAndroid Build Coastguard Worker; directly without copying from the SGPR. 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; Second use is a VGPR use of the constant. 64*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_multi_use_constant_i32_0: 65*9880d681SAndroid Build Coastguard Worker; SI: s_mov_b32 [[K:s[0-9]+]], 0x12d687 66*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_and_b32 [[AND:s[0-9]+]], s{{[0-9]+}}, [[K]] 67*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mov_b32_e32 [[VK:v[0-9]+]], [[K]] 68*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VK]] 69*9880d681SAndroid Build Coastguard Workerdefine void @s_and_multi_use_constant_i32_0(i32 addrspace(1)* %out, i32 %a, i32 %b) { 70*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, 1234567 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker ; Just to stop future replacement of copy to vgpr + store with VALU op. 73*9880d681SAndroid Build Coastguard Worker %foo = add i32 %and, %b 74*9880d681SAndroid Build Coastguard Worker store volatile i32 %foo, i32 addrspace(1)* %out 75*9880d681SAndroid Build Coastguard Worker store volatile i32 1234567, i32 addrspace(1)* %out 76*9880d681SAndroid Build Coastguard Worker ret void 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker; Second use is another SGPR use of the constant. 80*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_multi_use_constant_i32_1: 81*9880d681SAndroid Build Coastguard Worker; SI: s_mov_b32 [[K:s[0-9]+]], 0x12d687 82*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 [[AND:s[0-9]+]], s{{[0-9]+}}, [[K]] 83*9880d681SAndroid Build Coastguard Worker; SI: s_add_i32 84*9880d681SAndroid Build Coastguard Worker; SI: s_add_i32 [[ADD:s[0-9]+]], s{{[0-9]+}}, [[K]] 85*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VK]] 86*9880d681SAndroid Build Coastguard Workerdefine void @s_and_multi_use_constant_i32_1(i32 addrspace(1)* %out, i32 %a, i32 %b) { 87*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, 1234567 88*9880d681SAndroid Build Coastguard Worker %foo = add i32 %and, 1234567 89*9880d681SAndroid Build Coastguard Worker %bar = add i32 %foo, %b 90*9880d681SAndroid Build Coastguard Worker store volatile i32 %bar, i32 addrspace(1)* %out 91*9880d681SAndroid Build Coastguard Worker ret void 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_i32_vgpr_vgpr: 95*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 96*9880d681SAndroid Build Coastguard Workerdefine void @v_and_i32_vgpr_vgpr(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr, i32 addrspace(1)* %bptr) { 97*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() #0 98*9880d681SAndroid Build Coastguard Worker %gep.a = getelementptr i32, i32 addrspace(1)* %aptr, i32 %tid 99*9880d681SAndroid Build Coastguard Worker %gep.b = getelementptr i32, i32 addrspace(1)* %bptr, i32 %tid 100*9880d681SAndroid Build Coastguard Worker %gep.out = getelementptr i32, i32 addrspace(1)* %out, i32 %tid 101*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %gep.a 102*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %gep.b 103*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, %b 104*9880d681SAndroid Build Coastguard Worker store i32 %and, i32 addrspace(1)* %gep.out 105*9880d681SAndroid Build Coastguard Worker ret void 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_i32_sgpr_vgpr: 109*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_load_dword [[SA:s[0-9]+]] 110*9880d681SAndroid Build Coastguard Worker; SI-DAG: {{buffer|flat}}_load_dword [[VB:v[0-9]+]] 111*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+}}, [[SA]], [[VB]] 112*9880d681SAndroid Build Coastguard Workerdefine void @v_and_i32_sgpr_vgpr(i32 addrspace(1)* %out, i32 %a, i32 addrspace(1)* %bptr) { 113*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() #0 114*9880d681SAndroid Build Coastguard Worker %gep.b = getelementptr i32, i32 addrspace(1)* %bptr, i32 %tid 115*9880d681SAndroid Build Coastguard Worker %gep.out = getelementptr i32, i32 addrspace(1)* %out, i32 %tid 116*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %gep.b 117*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, %b 118*9880d681SAndroid Build Coastguard Worker store i32 %and, i32 addrspace(1)* %gep.out 119*9880d681SAndroid Build Coastguard Worker ret void 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_i32_vgpr_sgpr: 123*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_load_dword [[SA:s[0-9]+]] 124*9880d681SAndroid Build Coastguard Worker; SI-DAG: {{buffer|flat}}_load_dword [[VB:v[0-9]+]] 125*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+}}, [[SA]], [[VB]] 126*9880d681SAndroid Build Coastguard Workerdefine void @v_and_i32_vgpr_sgpr(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr, i32 %b) { 127*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() #0 128*9880d681SAndroid Build Coastguard Worker %gep.a = getelementptr i32, i32 addrspace(1)* %aptr, i32 %tid 129*9880d681SAndroid Build Coastguard Worker %gep.out = getelementptr i32, i32 addrspace(1)* %out, i32 %tid 130*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %gep.a 131*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, %b 132*9880d681SAndroid Build Coastguard Worker store i32 %and, i32 addrspace(1)* %gep.out 133*9880d681SAndroid Build Coastguard Worker ret void 134*9880d681SAndroid Build Coastguard Worker} 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_constant_i32 137*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+}}, 0x12d687, v{{[0-9]+}} 138*9880d681SAndroid Build Coastguard Workerdefine void @v_and_constant_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr) { 139*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %aptr, align 4 140*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, 1234567 141*9880d681SAndroid Build Coastguard Worker store i32 %and, i32 addrspace(1)* %out, align 4 142*9880d681SAndroid Build Coastguard Worker ret void 143*9880d681SAndroid Build Coastguard Worker} 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_inline_imm_64_i32 146*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+}}, 64, v{{[0-9]+}} 147*9880d681SAndroid Build Coastguard Workerdefine void @v_and_inline_imm_64_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr) { 148*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %aptr, align 4 149*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, 64 150*9880d681SAndroid Build Coastguard Worker store i32 %and, i32 addrspace(1)* %out, align 4 151*9880d681SAndroid Build Coastguard Worker ret void 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_inline_imm_neg_16_i32 155*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v{{[0-9]+}}, -16, v{{[0-9]+}} 156*9880d681SAndroid Build Coastguard Workerdefine void @v_and_inline_imm_neg_16_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr) { 157*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %aptr, align 4 158*9880d681SAndroid Build Coastguard Worker %and = and i32 %a, -16 159*9880d681SAndroid Build Coastguard Worker store i32 %and, i32 addrspace(1)* %out, align 4 160*9880d681SAndroid Build Coastguard Worker ret void 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_i64 164*9880d681SAndroid Build Coastguard Worker; SI: s_and_b64 165*9880d681SAndroid Build Coastguard Workerdefine void @s_and_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) { 166*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, %b 167*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 168*9880d681SAndroid Build Coastguard Worker ret void 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker; FIXME: Should use SGPRs 172*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_i1: 173*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32 174*9880d681SAndroid Build Coastguard Workerdefine void @s_and_i1(i1 addrspace(1)* %out, i1 %a, i1 %b) { 175*9880d681SAndroid Build Coastguard Worker %and = and i1 %a, %b 176*9880d681SAndroid Build Coastguard Worker store i1 %and, i1 addrspace(1)* %out 177*9880d681SAndroid Build Coastguard Worker ret void 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_constant_i64: 181*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_and_b32 s{{[0-9]+}}, s{{[0-9]+}}, 0x80000{{$}} 182*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_and_b32 s{{[0-9]+}}, s{{[0-9]+}}, 0x80{{$}} 183*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 184*9880d681SAndroid Build Coastguard Workerdefine void @s_and_constant_i64(i64 addrspace(1)* %out, i64 %a) { 185*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 549756338176 186*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 187*9880d681SAndroid Build Coastguard Worker ret void 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_multi_use_constant_i64: 191*9880d681SAndroid Build Coastguard Worker; XSI-DAG: s_mov_b32 s[[KLO:[0-9]+]], 0x80000{{$}} 192*9880d681SAndroid Build Coastguard Worker; XSI-DAG: s_mov_b32 s[[KHI:[0-9]+]], 0x80{{$}} 193*9880d681SAndroid Build Coastguard Worker; XSI: s_and_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, s{{\[}}[[KLO]]:[[KHI]]{{\]}} 194*9880d681SAndroid Build Coastguard Workerdefine void @s_and_multi_use_constant_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) { 195*9880d681SAndroid Build Coastguard Worker %and0 = and i64 %a, 549756338176 196*9880d681SAndroid Build Coastguard Worker %and1 = and i64 %b, 549756338176 197*9880d681SAndroid Build Coastguard Worker store volatile i64 %and0, i64 addrspace(1)* %out 198*9880d681SAndroid Build Coastguard Worker store volatile i64 %and1, i64 addrspace(1)* %out 199*9880d681SAndroid Build Coastguard Worker ret void 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_32_bit_constant_i64: 203*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 204*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 205*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s{{[0-9]+}}, s{{[0-9]+}}, 0x12d687{{$}} 206*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 207*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 208*9880d681SAndroid Build Coastguard Workerdefine void @s_and_32_bit_constant_i64(i64 addrspace(1)* %out, i64 %a) { 209*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 1234567 210*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 211*9880d681SAndroid Build Coastguard Worker ret void 212*9880d681SAndroid Build Coastguard Worker} 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_multi_use_inline_imm_i64: 215*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword [[A:s[0-9]+]] 216*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword [[B:s[0-9]+]] 217*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 218*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 219*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 220*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b32 [[A]], [[A]], 1 221*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b32 [[B]], [[B]], 1 222*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s{{[0-9]+}}, [[A]], 62 223*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s{{[0-9]+}}, [[B]], 62 224*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 225*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 226*9880d681SAndroid Build Coastguard Workerdefine void @s_and_multi_use_inline_imm_i64(i64 addrspace(1)* %out, i64 %a, i64 %b, i64 %c) { 227*9880d681SAndroid Build Coastguard Worker %shl.a = shl i64 %a, 1 228*9880d681SAndroid Build Coastguard Worker %shl.b = shl i64 %b, 1 229*9880d681SAndroid Build Coastguard Worker %and0 = and i64 %shl.a, 62 230*9880d681SAndroid Build Coastguard Worker %and1 = and i64 %shl.b, 62 231*9880d681SAndroid Build Coastguard Worker %add0 = add i64 %and0, %c 232*9880d681SAndroid Build Coastguard Worker %add1 = add i64 %and1, %c 233*9880d681SAndroid Build Coastguard Worker store volatile i64 %add0, i64 addrspace(1)* %out 234*9880d681SAndroid Build Coastguard Worker store volatile i64 %add1, i64 addrspace(1)* %out 235*9880d681SAndroid Build Coastguard Worker ret void 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_i64: 239*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32 240*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32 241*9880d681SAndroid Build Coastguard Workerdefine void @v_and_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 addrspace(1)* %bptr) { 242*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %aptr, align 8 243*9880d681SAndroid Build Coastguard Worker %b = load i64, i64 addrspace(1)* %bptr, align 8 244*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, %b 245*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 246*9880d681SAndroid Build Coastguard Worker ret void 247*9880d681SAndroid Build Coastguard Worker} 248*9880d681SAndroid Build Coastguard Worker 249*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_constant_i64: 250*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_and_b32_e32 {{v[0-9]+}}, 0xab19b207, {{v[0-9]+}} 251*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_and_b32_e32 {{v[0-9]+}}, 0x11e, {{v[0-9]+}} 252*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 253*9880d681SAndroid Build Coastguard Workerdefine void @v_and_constant_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) { 254*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %aptr, align 8 255*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 1231231234567 256*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 257*9880d681SAndroid Build Coastguard Worker ret void 258*9880d681SAndroid Build Coastguard Worker} 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_multi_use_constant_i64: 261*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dwordx2 v{{\[}}[[LO0:[0-9]+]]:[[HI0:[0-9]+]]{{\]}} 262*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dwordx2 v{{\[}}[[LO1:[0-9]+]]:[[HI1:[0-9]+]]{{\]}} 263*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_mov_b32 [[KLO:s[0-9]+]], 0xab19b207{{$}} 264*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_movk_i32 [[KHI:s[0-9]+]], 0x11e{{$}} 265*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_and_b32_e32 {{v[0-9]+}}, [[KLO]], v[[LO0]] 266*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_and_b32_e32 {{v[0-9]+}}, [[KHI]], v[[HI0]] 267*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_and_b32_e32 {{v[0-9]+}}, [[KLO]], v[[LO1]] 268*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_and_b32_e32 {{v[0-9]+}}, [[KHI]], v[[HI1]] 269*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 270*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 271*9880d681SAndroid Build Coastguard Workerdefine void @v_and_multi_use_constant_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) { 272*9880d681SAndroid Build Coastguard Worker %a = load volatile i64, i64 addrspace(1)* %aptr 273*9880d681SAndroid Build Coastguard Worker %b = load volatile i64, i64 addrspace(1)* %aptr 274*9880d681SAndroid Build Coastguard Worker %and0 = and i64 %a, 1231231234567 275*9880d681SAndroid Build Coastguard Worker %and1 = and i64 %b, 1231231234567 276*9880d681SAndroid Build Coastguard Worker store volatile i64 %and0, i64 addrspace(1)* %out 277*9880d681SAndroid Build Coastguard Worker store volatile i64 %and1, i64 addrspace(1)* %out 278*9880d681SAndroid Build Coastguard Worker ret void 279*9880d681SAndroid Build Coastguard Worker} 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_multi_use_inline_imm_i64: 282*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dwordx2 v{{\[}}[[LO0:[0-9]+]]:[[HI0:[0-9]+]]{{\]}} 283*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 284*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dwordx2 v{{\[}}[[LO1:[0-9]+]]:[[HI1:[0-9]+]]{{\]}} 285*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 286*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v[[RESLO0:[0-9]+]], 63, v[[LO0]] 287*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 288*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 v{{\[}}[[RESLO0]] 289*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 v[[RESLO1:[0-9]+]], 63, v[[LO1]] 290*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 291*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 v{{\[}}[[RESLO1]] 292*9880d681SAndroid Build Coastguard Workerdefine void @v_and_multi_use_inline_imm_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) { 293*9880d681SAndroid Build Coastguard Worker %a = load volatile i64, i64 addrspace(1)* %aptr 294*9880d681SAndroid Build Coastguard Worker %b = load volatile i64, i64 addrspace(1)* %aptr 295*9880d681SAndroid Build Coastguard Worker %and0 = and i64 %a, 63 296*9880d681SAndroid Build Coastguard Worker %and1 = and i64 %b, 63 297*9880d681SAndroid Build Coastguard Worker store volatile i64 %and0, i64 addrspace(1)* %out 298*9880d681SAndroid Build Coastguard Worker store volatile i64 %and1, i64 addrspace(1)* %out 299*9880d681SAndroid Build Coastguard Worker ret void 300*9880d681SAndroid Build Coastguard Worker} 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_i64_32_bit_constant: 303*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[VAL:v[0-9]+]] 304*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 305*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 {{v[0-9]+}}, 0x12d687, [[VAL]] 306*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 307*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 308*9880d681SAndroid Build Coastguard Workerdefine void @v_and_i64_32_bit_constant(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) { 309*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %aptr, align 8 310*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 1234567 311*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 312*9880d681SAndroid Build Coastguard Worker ret void 313*9880d681SAndroid Build Coastguard Worker} 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_and_inline_imm_i64: 316*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword v{{[0-9]+}} 317*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 318*9880d681SAndroid Build Coastguard Worker; SI: v_and_b32_e32 {{v[0-9]+}}, 64, {{v[0-9]+}} 319*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 320*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 321*9880d681SAndroid Build Coastguard Workerdefine void @v_and_inline_imm_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) { 322*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %aptr, align 8 323*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 64 324*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 325*9880d681SAndroid Build Coastguard Worker ret void 326*9880d681SAndroid Build Coastguard Worker} 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_64_i64 329*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword 330*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 331*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s{{[0-9]+}}, s{{[0-9]+}}, 64 332*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 333*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword 334*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_64_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 335*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 64 336*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 337*9880d681SAndroid Build Coastguard Worker ret void 338*9880d681SAndroid Build Coastguard Worker} 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_64_i64_noshrink: 341*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword [[A:s[0-9]+]] 342*9880d681SAndroid Build Coastguard Worker; SI: s_lshl_b32 [[A]], [[A]], 1{{$}} 343*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 344*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s{{[0-9]+}}, [[A]], 64 345*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 346*9880d681SAndroid Build Coastguard Worker; SI: s_add_u32 347*9880d681SAndroid Build Coastguard Worker; SI-NEXT: s_addc_u32 348*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_64_i64_noshrink(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a, i64 %b) { 349*9880d681SAndroid Build Coastguard Worker %shl = shl i64 %a, 1 350*9880d681SAndroid Build Coastguard Worker %and = and i64 %shl, 64 351*9880d681SAndroid Build Coastguard Worker %add = add i64 %and, %b 352*9880d681SAndroid Build Coastguard Worker store i64 %add, i64 addrspace(1)* %out, align 8 353*9880d681SAndroid Build Coastguard Worker ret void 354*9880d681SAndroid Build Coastguard Worker} 355*9880d681SAndroid Build Coastguard Worker 356*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_1_i64 357*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 358*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 359*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s{{[0-9]+}}, s{{[0-9]+}}, 1 360*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 361*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 362*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_1_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 363*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 1 364*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 365*9880d681SAndroid Build Coastguard Worker ret void 366*9880d681SAndroid Build Coastguard Worker} 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_1.0_i64 369*9880d681SAndroid Build Coastguard Worker; XSI: s_and_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 1.0 370*9880d681SAndroid Build Coastguard Worker 371*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 372*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 373*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 374*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 {{s[0-9]+}}, {{s[0-9]+}}, 0x3ff00000 375*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 376*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 377*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_1.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 378*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 4607182418800017408 379*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 380*9880d681SAndroid Build Coastguard Worker ret void 381*9880d681SAndroid Build Coastguard Worker} 382*9880d681SAndroid Build Coastguard Worker 383*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_neg_1.0_i64 384*9880d681SAndroid Build Coastguard Worker; XSI: s_and_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, -1.0 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 387*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 388*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 389*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 {{s[0-9]+}}, {{s[0-9]+}}, 0xbff00000 390*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 391*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 392*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_neg_1.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 393*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 13830554455654793216 394*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 395*9880d681SAndroid Build Coastguard Worker ret void 396*9880d681SAndroid Build Coastguard Worker} 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_0.5_i64 399*9880d681SAndroid Build Coastguard Worker; XSI: s_and_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 0.5 400*9880d681SAndroid Build Coastguard Worker 401*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 402*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 403*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 404*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 {{s[0-9]+}}, {{s[0-9]+}}, 0x3fe00000 405*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 406*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 407*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_0.5_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 408*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 4602678819172646912 409*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 410*9880d681SAndroid Build Coastguard Worker ret void 411*9880d681SAndroid Build Coastguard Worker} 412*9880d681SAndroid Build Coastguard Worker 413*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_neg_0.5_i64: 414*9880d681SAndroid Build Coastguard Worker; XSI: s_and_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, -0.5 415*9880d681SAndroid Build Coastguard Worker 416*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 417*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 418*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 419*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 {{s[0-9]+}}, {{s[0-9]+}}, 0xbfe00000 420*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 421*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 422*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_neg_0.5_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 423*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 13826050856027422720 424*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 425*9880d681SAndroid Build Coastguard Worker ret void 426*9880d681SAndroid Build Coastguard Worker} 427*9880d681SAndroid Build Coastguard Worker 428*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_2.0_i64: 429*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 430*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 431*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 432*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 {{s[0-9]+}}, {{s[0-9]+}}, 2.0 433*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 434*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 435*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_2.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 436*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 4611686018427387904 437*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 438*9880d681SAndroid Build Coastguard Worker ret void 439*9880d681SAndroid Build Coastguard Worker} 440*9880d681SAndroid Build Coastguard Worker 441*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_neg_2.0_i64: 442*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 443*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 444*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 445*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 {{s[0-9]+}}, {{s[0-9]+}}, -2.0 446*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 447*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 448*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_neg_2.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 449*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 13835058055282163712 450*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 451*9880d681SAndroid Build Coastguard Worker ret void 452*9880d681SAndroid Build Coastguard Worker} 453*9880d681SAndroid Build Coastguard Worker 454*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_4.0_i64: 455*9880d681SAndroid Build Coastguard Worker; XSI: s_and_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 4.0 456*9880d681SAndroid Build Coastguard Worker 457*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 458*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 459*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 460*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 {{s[0-9]+}}, {{s[0-9]+}}, 0x40100000 461*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 462*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 463*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 464*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 4616189618054758400 465*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 466*9880d681SAndroid Build Coastguard Worker ret void 467*9880d681SAndroid Build Coastguard Worker} 468*9880d681SAndroid Build Coastguard Worker 469*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_neg_4.0_i64: 470*9880d681SAndroid Build Coastguard Worker; XSI: s_and_b64 s{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, -4.0 471*9880d681SAndroid Build Coastguard Worker 472*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 473*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 474*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 475*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 {{s[0-9]+}}, {{s[0-9]+}}, 0xc0100000 476*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 477*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 478*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_neg_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 479*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 13839561654909534208 480*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 481*9880d681SAndroid Build Coastguard Worker ret void 482*9880d681SAndroid Build Coastguard Worker} 483*9880d681SAndroid Build Coastguard Worker 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Worker; Test with the 64-bit integer bitpattern for a 32-bit float in the 486*9880d681SAndroid Build Coastguard Worker; low 32-bits, which is not a valid 64-bit inline immmediate. 487*9880d681SAndroid Build Coastguard Worker 488*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_f32_4.0_i64: 489*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword s 490*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 491*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 492*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s[[K_HI:[0-9]+]], s{{[0-9]+}}, 4.0 493*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 494*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 495*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_f32_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 496*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 1082130432 497*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 498*9880d681SAndroid Build Coastguard Worker ret void 499*9880d681SAndroid Build Coastguard Worker} 500*9880d681SAndroid Build Coastguard Worker 501*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_imm_f32_neg_4.0_i64: 502*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 503*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 504*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 505*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s[[K_HI:[0-9]+]], s{{[0-9]+}}, -4.0 506*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 507*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 508*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_imm_f32_neg_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 509*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, -1065353216 510*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 511*9880d681SAndroid Build Coastguard Worker ret void 512*9880d681SAndroid Build Coastguard Worker} 513*9880d681SAndroid Build Coastguard Worker 514*9880d681SAndroid Build Coastguard Worker; Shift into upper 32-bits 515*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 516*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 517*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 518*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s[[K_HI:[0-9]+]], s{{[0-9]+}}, 4.0 519*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 520*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 521*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_high_imm_f32_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 522*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 4647714815446351872 523*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 524*9880d681SAndroid Build Coastguard Worker ret void 525*9880d681SAndroid Build Coastguard Worker} 526*9880d681SAndroid Build Coastguard Worker 527*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_and_inline_high_imm_f32_neg_4.0_i64: 528*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 529*9880d681SAndroid Build Coastguard Worker; SI: s_load_dwordx2 530*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 531*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 s[[K_HI:[0-9]+]], s{{[0-9]+}}, -4.0 532*9880d681SAndroid Build Coastguard Worker; SI-NOT: and 533*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dwordx2 534*9880d681SAndroid Build Coastguard Workerdefine void @s_and_inline_high_imm_f32_neg_4.0_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr, i64 %a) { 535*9880d681SAndroid Build Coastguard Worker %and = and i64 %a, 13871086852301127680 536*9880d681SAndroid Build Coastguard Worker store i64 %and, i64 addrspace(1)* %out, align 8 537*9880d681SAndroid Build Coastguard Worker ret void 538*9880d681SAndroid Build Coastguard Worker} 539*9880d681SAndroid Build Coastguard Worker 540*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 541