1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=R600 -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}rotr_i32: 6*9880d681SAndroid Build Coastguard Worker; R600: BIT_ALIGN_INT 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; SI: v_alignbit_b32 9*9880d681SAndroid Build Coastguard Workerdefine void @rotr_i32(i32 addrspace(1)* %in, i32 %x, i32 %y) { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %tmp0 = sub i32 32, %y 12*9880d681SAndroid Build Coastguard Worker %tmp1 = shl i32 %x, %tmp0 13*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr i32 %x, %y 14*9880d681SAndroid Build Coastguard Worker %tmp3 = or i32 %tmp1, %tmp2 15*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %in 16*9880d681SAndroid Build Coastguard Worker ret void 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}rotr_v2i32: 20*9880d681SAndroid Build Coastguard Worker; R600: BIT_ALIGN_INT 21*9880d681SAndroid Build Coastguard Worker; R600: BIT_ALIGN_INT 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; SI: v_alignbit_b32 24*9880d681SAndroid Build Coastguard Worker; SI: v_alignbit_b32 25*9880d681SAndroid Build Coastguard Workerdefine void @rotr_v2i32(<2 x i32> addrspace(1)* %in, <2 x i32> %x, <2 x i32> %y) { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker %tmp0 = sub <2 x i32> <i32 32, i32 32>, %y 28*9880d681SAndroid Build Coastguard Worker %tmp1 = shl <2 x i32> %x, %tmp0 29*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <2 x i32> %x, %y 30*9880d681SAndroid Build Coastguard Worker %tmp3 = or <2 x i32> %tmp1, %tmp2 31*9880d681SAndroid Build Coastguard Worker store <2 x i32> %tmp3, <2 x i32> addrspace(1)* %in 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}rotr_v4i32: 36*9880d681SAndroid Build Coastguard Worker; R600: BIT_ALIGN_INT 37*9880d681SAndroid Build Coastguard Worker; R600: BIT_ALIGN_INT 38*9880d681SAndroid Build Coastguard Worker; R600: BIT_ALIGN_INT 39*9880d681SAndroid Build Coastguard Worker; R600: BIT_ALIGN_INT 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; SI: v_alignbit_b32 42*9880d681SAndroid Build Coastguard Worker; SI: v_alignbit_b32 43*9880d681SAndroid Build Coastguard Worker; SI: v_alignbit_b32 44*9880d681SAndroid Build Coastguard Worker; SI: v_alignbit_b32 45*9880d681SAndroid Build Coastguard Workerdefine void @rotr_v4i32(<4 x i32> addrspace(1)* %in, <4 x i32> %x, <4 x i32> %y) { 46*9880d681SAndroid Build Coastguard Workerentry: 47*9880d681SAndroid Build Coastguard Worker %tmp0 = sub <4 x i32> <i32 32, i32 32, i32 32, i32 32>, %y 48*9880d681SAndroid Build Coastguard Worker %tmp1 = shl <4 x i32> %x, %tmp0 49*9880d681SAndroid Build Coastguard Worker %tmp2 = lshr <4 x i32> %x, %y 50*9880d681SAndroid Build Coastguard Worker %tmp3 = or <4 x i32> %tmp1, %tmp2 51*9880d681SAndroid Build Coastguard Worker store <4 x i32> %tmp3, <4 x i32> addrspace(1)* %in 52*9880d681SAndroid Build Coastguard Worker ret void 53*9880d681SAndroid Build Coastguard Worker} 54