1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test using an integer literal constant. 4*9880d681SAndroid Build Coastguard Worker; Generated ASM should be: 5*9880d681SAndroid Build Coastguard Worker; ADD_INT KC0[2].Z literal.x, 5 6*9880d681SAndroid Build Coastguard Worker; or 7*9880d681SAndroid Build Coastguard Worker; ADD_INT literal.x KC0[2].Z, 5 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}i32_literal: 10*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ADD_INT * {{\** *}}T{{[0-9]\.[XYZW]}}, KC0[2].Z, literal.y 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 5 13*9880d681SAndroid Build Coastguard Workerdefine void @i32_literal(i32 addrspace(1)* %out, i32 %in) { 14*9880d681SAndroid Build Coastguard Workerentry: 15*9880d681SAndroid Build Coastguard Worker %0 = add i32 5, %in 16*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 17*9880d681SAndroid Build Coastguard Worker ret void 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; Test using a float literal constant. 21*9880d681SAndroid Build Coastguard Worker; Generated ASM should be: 22*9880d681SAndroid Build Coastguard Worker; ADD KC0[2].Z literal.x, 5.0 23*9880d681SAndroid Build Coastguard Worker; or 24*9880d681SAndroid Build Coastguard Worker; ADD literal.x KC0[2].Z, 5.0 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}float_literal: 27*9880d681SAndroid Build Coastguard Worker; CHECK: LSHR 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ADD * {{\** *}}T{{[0-9]\.[XYZW]}}, KC0[2].Z, literal.y 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 1084227584(5.0 30*9880d681SAndroid Build Coastguard Workerdefine void @float_literal(float addrspace(1)* %out, float %in) { 31*9880d681SAndroid Build Coastguard Workerentry: 32*9880d681SAndroid Build Coastguard Worker %0 = fadd float 5.0, %in 33*9880d681SAndroid Build Coastguard Worker store float %0, float addrspace(1)* %out 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; Make sure inline literals are folded into REG_SEQUENCE instructions. 38*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}inline_literal_reg_sequence: 39*9880d681SAndroid Build Coastguard Worker; CHECK: MOV {{\** *}}T[[GPR:[0-9]]].X, 0.0 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: MOV {{\** *}}T[[GPR]].Y, 0.0 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: MOV {{\** *}}T[[GPR]].Z, 0.0 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: MOV {{\** *}}T[[GPR]].W, 0.0 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine void @inline_literal_reg_sequence(<4 x i32> addrspace(1)* %out) { 45*9880d681SAndroid Build Coastguard Workerentry: 46*9880d681SAndroid Build Coastguard Worker store <4 x i32> <i32 0, i32 0, i32 0, i32 0>, <4 x i32> addrspace(1)* %out 47*9880d681SAndroid Build Coastguard Worker ret void 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; CHECK: {{^}}inline_literal_dot4: 51*9880d681SAndroid Build Coastguard Worker; CHECK: DOT4 T[[GPR:[0-9]]].X, 1.0 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: DOT4 T[[GPR]].Y (MASKED), 1.0 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: DOT4 T[[GPR]].Z (MASKED), 1.0 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: DOT4 * T[[GPR]].W (MASKED), 1.0 55*9880d681SAndroid Build Coastguard Workerdefine void @inline_literal_dot4(float addrspace(1)* %out) { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker %0 = call float @llvm.r600.dot4(<4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>) 58*9880d681SAndroid Build Coastguard Worker store float %0, float addrspace(1)* %out 59*9880d681SAndroid Build Coastguard Worker ret void 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.r600.dot4(<4 x float>, <4 x float>) #1 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerattributes #1 = { readnone } 65