1*9880d681SAndroid Build Coastguard Worker;RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}main: 4*9880d681SAndroid Build Coastguard Worker; CHECK: ADD * 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine amdgpu_vs void @main(<4 x float> inreg %reg0, <4 x float> inreg %reg1, <4 x float> inreg %reg2) { 7*9880d681SAndroid Build Coastguard Workermain_body: 8*9880d681SAndroid Build Coastguard Worker %0 = extractelement <4 x float> %reg1, i32 0 9*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %reg1, i32 1 10*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %reg1, i32 2 11*9880d681SAndroid Build Coastguard Worker %3 = extractelement <4 x float> %reg1, i32 3 12*9880d681SAndroid Build Coastguard Worker %4 = extractelement <4 x float> %reg2, i32 0 13*9880d681SAndroid Build Coastguard Worker %5 = fadd float %0, 2.0 14*9880d681SAndroid Build Coastguard Worker %6 = fadd float %1, 3.0 15*9880d681SAndroid Build Coastguard Worker %7 = fadd float %2, 4.0 16*9880d681SAndroid Build Coastguard Worker %8 = fadd float %3, 5.0 17*9880d681SAndroid Build Coastguard Worker %9 = bitcast float %4 to i32 18*9880d681SAndroid Build Coastguard Worker %10 = mul i32 %9, 6 19*9880d681SAndroid Build Coastguard Worker %11 = bitcast i32 %10 to float 20*9880d681SAndroid Build Coastguard Worker %12 = insertelement <4 x float> undef, float %5, i32 0 21*9880d681SAndroid Build Coastguard Worker %13 = insertelement <4 x float> %12, float %6, i32 1 22*9880d681SAndroid Build Coastguard Worker %14 = insertelement <4 x float> %13, float %7, i32 2 23*9880d681SAndroid Build Coastguard Worker %15 = insertelement <4 x float> %14, float %8, i32 3 24*9880d681SAndroid Build Coastguard Worker %16 = insertelement <4 x float> %15, float %11, i32 3 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker %17 = call float @llvm.r600.dot4(<4 x float> %15,<4 x float> %16) 27*9880d681SAndroid Build Coastguard Worker %18 = insertelement <4 x float> undef, float %17, i32 0 28*9880d681SAndroid Build Coastguard Worker call void @llvm.R600.store.swizzle(<4 x float> %18, i32 0, i32 2) 29*9880d681SAndroid Build Coastguard Worker ret void 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: {{^}}main2: 33*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ADD * 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine amdgpu_vs void @main2(<4 x float> inreg %reg0, <4 x float> inreg %reg1, <4 x float> inreg %reg2) { 36*9880d681SAndroid Build Coastguard Workermain_body: 37*9880d681SAndroid Build Coastguard Worker %0 = extractelement <4 x float> %reg1, i32 0 38*9880d681SAndroid Build Coastguard Worker %1 = extractelement <4 x float> %reg1, i32 1 39*9880d681SAndroid Build Coastguard Worker %2 = extractelement <4 x float> %reg1, i32 2 40*9880d681SAndroid Build Coastguard Worker %3 = extractelement <4 x float> %reg1, i32 3 41*9880d681SAndroid Build Coastguard Worker %4 = extractelement <4 x float> %reg2, i32 0 42*9880d681SAndroid Build Coastguard Worker %5 = fadd float %0, 2.0 43*9880d681SAndroid Build Coastguard Worker %6 = fadd float %1, 3.0 44*9880d681SAndroid Build Coastguard Worker %7 = fadd float %2, 4.0 45*9880d681SAndroid Build Coastguard Worker %8 = fadd float %3, 2.0 46*9880d681SAndroid Build Coastguard Worker %9 = bitcast float %4 to i32 47*9880d681SAndroid Build Coastguard Worker %10 = mul i32 %9, 6 48*9880d681SAndroid Build Coastguard Worker %11 = bitcast i32 %10 to float 49*9880d681SAndroid Build Coastguard Worker %12 = insertelement <4 x float> undef, float %5, i32 0 50*9880d681SAndroid Build Coastguard Worker %13 = insertelement <4 x float> %12, float %6, i32 1 51*9880d681SAndroid Build Coastguard Worker %14 = insertelement <4 x float> %13, float %7, i32 2 52*9880d681SAndroid Build Coastguard Worker %15 = insertelement <4 x float> %14, float %8, i32 3 53*9880d681SAndroid Build Coastguard Worker %16 = insertelement <4 x float> %15, float %11, i32 3 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker %17 = call float @llvm.r600.dot4(<4 x float> %15,<4 x float> %16) 56*9880d681SAndroid Build Coastguard Worker %18 = insertelement <4 x float> undef, float %17, i32 0 57*9880d681SAndroid Build Coastguard Worker call void @llvm.R600.store.swizzle(<4 x float> %18, i32 0, i32 2) 58*9880d681SAndroid Build Coastguard Worker ret void 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker; Function Attrs: readnone 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 Workerdeclare void @llvm.R600.store.swizzle(<4 x float>, i32, i32) 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerattributes #1 = { readnone } 67