1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test that materialization constants that are the bit reversed of 4*9880d681SAndroid Build Coastguard Worker; inline immediates are replaced with bfrev of the inline immediate to 5*9880d681SAndroid Build Coastguard Worker; save code size. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_0_i32: 8*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0{{$}} 9*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 10*9880d681SAndroid Build Coastguard Workerdefine void @materialize_0_i32(i32 addrspace(1)* %out) { 11*9880d681SAndroid Build Coastguard Worker store i32 0, i32 addrspace(1)* %out 12*9880d681SAndroid Build Coastguard Worker ret void 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_0_i64: 16*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}} 17*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIK:[0-9]+]], v[[LOK]]{{$}} 18*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 19*9880d681SAndroid Build Coastguard Workerdefine void @materialize_0_i64(i64 addrspace(1)* %out) { 20*9880d681SAndroid Build Coastguard Worker store i64 0, i64 addrspace(1)* %out 21*9880d681SAndroid Build Coastguard Worker ret void 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_neg1_i32: 25*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], -1{{$}} 26*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 27*9880d681SAndroid Build Coastguard Workerdefine void @materialize_neg1_i32(i32 addrspace(1)* %out) { 28*9880d681SAndroid Build Coastguard Worker store i32 -1, i32 addrspace(1)* %out 29*9880d681SAndroid Build Coastguard Worker ret void 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_neg1_i64: 33*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}} 34*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIK:[0-9]+]], v[[LOK]]{{$}} 35*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 36*9880d681SAndroid Build Coastguard Workerdefine void @materialize_neg1_i64(i64 addrspace(1)* %out) { 37*9880d681SAndroid Build Coastguard Worker store i64 -1, i64 addrspace(1)* %out 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_signbit_i32: 42*9880d681SAndroid Build Coastguard Worker; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], 1{{$}} 43*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 44*9880d681SAndroid Build Coastguard Workerdefine void @materialize_signbit_i32(i32 addrspace(1)* %out) { 45*9880d681SAndroid Build Coastguard Worker store i32 -2147483648, i32 addrspace(1)* %out 46*9880d681SAndroid Build Coastguard Worker ret void 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_signbit_i64: 50*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}} 51*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], 1{{$}} 52*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 53*9880d681SAndroid Build Coastguard Workerdefine void @materialize_signbit_i64(i64 addrspace(1)* %out) { 54*9880d681SAndroid Build Coastguard Worker store i64 -9223372036854775808, i64 addrspace(1)* %out 55*9880d681SAndroid Build Coastguard Worker ret void 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_neg16_i32: 59*9880d681SAndroid Build Coastguard Worker; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], -16{{$}} 60*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 61*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_neg16_i32(i32 addrspace(1)* %out) { 62*9880d681SAndroid Build Coastguard Worker store i32 268435455, i32 addrspace(1)* %out 63*9880d681SAndroid Build Coastguard Worker ret void 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_neg16_i64: 67*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}} 68*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], -16{{$}} 69*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 70*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_neg16_i64(i64 addrspace(1)* %out) { 71*9880d681SAndroid Build Coastguard Worker store i64 1152921504606846975, i64 addrspace(1)* %out 72*9880d681SAndroid Build Coastguard Worker ret void 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_neg17_i32: 76*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0xf7ffffff{{$}} 77*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 78*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_neg17_i32(i32 addrspace(1)* %out) { 79*9880d681SAndroid Build Coastguard Worker store i32 -134217729, i32 addrspace(1)* %out 80*9880d681SAndroid Build Coastguard Worker ret void 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_neg17_i64: 84*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}} 85*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0xf7ffffff{{$}} 86*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 87*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_neg17_i64(i64 addrspace(1)* %out) { 88*9880d681SAndroid Build Coastguard Worker store i64 -576460752303423489, i64 addrspace(1)* %out 89*9880d681SAndroid Build Coastguard Worker ret void 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_64_i32: 93*9880d681SAndroid Build Coastguard Worker; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], 64{{$}} 94*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 95*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_64_i32(i32 addrspace(1)* %out) { 96*9880d681SAndroid Build Coastguard Worker store i32 33554432, i32 addrspace(1)* %out 97*9880d681SAndroid Build Coastguard Worker ret void 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_64_i64: 101*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}} 102*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], 64{{$}} 103*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 104*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_64_i64(i64 addrspace(1)* %out) { 105*9880d681SAndroid Build Coastguard Worker store i64 144115188075855872, i64 addrspace(1)* %out 106*9880d681SAndroid Build Coastguard Worker ret void 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_65_i32: 110*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0x82000000{{$}} 111*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 112*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_65_i32(i32 addrspace(1)* %out) { 113*9880d681SAndroid Build Coastguard Worker store i32 -2113929216, i32 addrspace(1)* %out 114*9880d681SAndroid Build Coastguard Worker ret void 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_65_i64: 118*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}} 119*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0x82000000{{$}} 120*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 121*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_65_i64(i64 addrspace(1)* %out) { 122*9880d681SAndroid Build Coastguard Worker store i64 -9079256848778919936, i64 addrspace(1)* %out 123*9880d681SAndroid Build Coastguard Worker ret void 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_3_i32: 127*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], -2.0{{$}} 128*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 129*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_3_i32(i32 addrspace(1)* %out) { 130*9880d681SAndroid Build Coastguard Worker store i32 -1073741824, i32 addrspace(1)* %out 131*9880d681SAndroid Build Coastguard Worker ret void 132*9880d681SAndroid Build Coastguard Worker} 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_3_i64: 135*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}} 136*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], -2.0{{$}} 137*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 138*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_3_i64(i64 addrspace(1)* %out) { 139*9880d681SAndroid Build Coastguard Worker store i64 -4611686018427387904, i64 addrspace(1)* %out 140*9880d681SAndroid Build Coastguard Worker ret void 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_1.0_i32: 144*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0x1fc{{$}} 145*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[K]] 146*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_1.0_i32(i32 addrspace(1)* %out) { 147*9880d681SAndroid Build Coastguard Worker store i32 508, i32 addrspace(1)* %out 148*9880d681SAndroid Build Coastguard Worker ret void 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}materialize_rev_1.0_i64: 152*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0x1fc{{$}} 153*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0{{$}} 154*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}} 155*9880d681SAndroid Build Coastguard Workerdefine void @materialize_rev_1.0_i64(i64 addrspace(1)* %out) { 156*9880d681SAndroid Build Coastguard Worker store i64 508, i64 addrspace(1)* %out 157*9880d681SAndroid Build Coastguard Worker ret void 158*9880d681SAndroid Build Coastguard Worker} 159