2013-05-18 00:51:06 +08:00
|
|
|
;RUN: llc < %s -march=r600 -mcpu=cayman
|
|
|
|
;REQUIRES: asserts
|
|
|
|
|
2013-11-12 06:10:24 +08:00
|
|
|
define void @main(<4 x float> inreg %reg0, <4 x float> inreg %reg1, <4 x float> inreg %reg2, <4 x float> inreg %reg3) #0 {
|
2013-05-18 00:51:06 +08:00
|
|
|
main_body:
|
2013-11-12 06:10:24 +08:00
|
|
|
%0 = extractelement <4 x float> %reg1, i32 0
|
|
|
|
%1 = extractelement <4 x float> %reg1, i32 1
|
|
|
|
%2 = extractelement <4 x float> %reg1, i32 2
|
|
|
|
%3 = extractelement <4 x float> %reg1, i32 3
|
|
|
|
%4 = extractelement <4 x float> %reg2, i32 0
|
|
|
|
%5 = extractelement <4 x float> %reg2, i32 1
|
|
|
|
%6 = extractelement <4 x float> %reg2, i32 2
|
|
|
|
%7 = extractelement <4 x float> %reg2, i32 3
|
|
|
|
%8 = extractelement <4 x float> %reg3, i32 0
|
|
|
|
%9 = extractelement <4 x float> %reg3, i32 1
|
|
|
|
%10 = extractelement <4 x float> %reg3, i32 2
|
|
|
|
%11 = extractelement <4 x float> %reg3, i32 3
|
2013-05-18 00:51:06 +08:00
|
|
|
%12 = load <4 x float> addrspace(8)* null
|
|
|
|
%13 = extractelement <4 x float> %12, i32 0
|
|
|
|
%14 = fmul float %0, %13
|
|
|
|
%15 = load <4 x float> addrspace(8)* null
|
|
|
|
%16 = extractelement <4 x float> %15, i32 1
|
|
|
|
%17 = fmul float %0, %16
|
|
|
|
%18 = load <4 x float> addrspace(8)* null
|
|
|
|
%19 = extractelement <4 x float> %18, i32 2
|
|
|
|
%20 = fmul float %0, %19
|
|
|
|
%21 = load <4 x float> addrspace(8)* null
|
|
|
|
%22 = extractelement <4 x float> %21, i32 3
|
|
|
|
%23 = fmul float %0, %22
|
|
|
|
%24 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 1)
|
|
|
|
%25 = extractelement <4 x float> %24, i32 0
|
|
|
|
%26 = fmul float %1, %25
|
|
|
|
%27 = fadd float %26, %14
|
|
|
|
%28 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 1)
|
|
|
|
%29 = extractelement <4 x float> %28, i32 1
|
|
|
|
%30 = fmul float %1, %29
|
|
|
|
%31 = fadd float %30, %17
|
|
|
|
%32 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 1)
|
|
|
|
%33 = extractelement <4 x float> %32, i32 2
|
|
|
|
%34 = fmul float %1, %33
|
|
|
|
%35 = fadd float %34, %20
|
|
|
|
%36 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 1)
|
|
|
|
%37 = extractelement <4 x float> %36, i32 3
|
|
|
|
%38 = fmul float %1, %37
|
|
|
|
%39 = fadd float %38, %23
|
|
|
|
%40 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 2)
|
|
|
|
%41 = extractelement <4 x float> %40, i32 0
|
|
|
|
%42 = fmul float %2, %41
|
|
|
|
%43 = fadd float %42, %27
|
|
|
|
%44 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 2)
|
|
|
|
%45 = extractelement <4 x float> %44, i32 1
|
|
|
|
%46 = fmul float %2, %45
|
|
|
|
%47 = fadd float %46, %31
|
|
|
|
%48 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 2)
|
|
|
|
%49 = extractelement <4 x float> %48, i32 2
|
|
|
|
%50 = fmul float %2, %49
|
|
|
|
%51 = fadd float %50, %35
|
|
|
|
%52 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 2)
|
|
|
|
%53 = extractelement <4 x float> %52, i32 3
|
|
|
|
%54 = fmul float %2, %53
|
|
|
|
%55 = fadd float %54, %39
|
|
|
|
%56 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 3)
|
|
|
|
%57 = extractelement <4 x float> %56, i32 0
|
|
|
|
%58 = fmul float %3, %57
|
|
|
|
%59 = fadd float %58, %43
|
|
|
|
%60 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 3)
|
|
|
|
%61 = extractelement <4 x float> %60, i32 1
|
|
|
|
%62 = fmul float %3, %61
|
|
|
|
%63 = fadd float %62, %47
|
|
|
|
%64 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 3)
|
|
|
|
%65 = extractelement <4 x float> %64, i32 2
|
|
|
|
%66 = fmul float %3, %65
|
|
|
|
%67 = fadd float %66, %51
|
|
|
|
%68 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 3)
|
|
|
|
%69 = extractelement <4 x float> %68, i32 3
|
|
|
|
%70 = fmul float %3, %69
|
|
|
|
%71 = fadd float %70, %55
|
|
|
|
%72 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 4)
|
|
|
|
%73 = extractelement <4 x float> %72, i32 0
|
|
|
|
%74 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 4)
|
|
|
|
%75 = extractelement <4 x float> %74, i32 1
|
|
|
|
%76 = load <4 x float> addrspace(8)* getelementptr ([1024 x <4 x float>] addrspace(8)* null, i64 0, i32 4)
|
|
|
|
%77 = extractelement <4 x float> %76, i32 2
|
|
|
|
%78 = insertelement <4 x float> undef, float %4, i32 0
|
|
|
|
%79 = insertelement <4 x float> %78, float %5, i32 1
|
|
|
|
%80 = insertelement <4 x float> %79, float %6, i32 2
|
|
|
|
%81 = insertelement <4 x float> %80, float 0.000000e+00, i32 3
|
|
|
|
%82 = insertelement <4 x float> undef, float %73, i32 0
|
|
|
|
%83 = insertelement <4 x float> %82, float %75, i32 1
|
|
|
|
%84 = insertelement <4 x float> %83, float %77, i32 2
|
|
|
|
%85 = insertelement <4 x float> %84, float 0.000000e+00, i32 3
|
|
|
|
%86 = call float @llvm.AMDGPU.dp4(<4 x float> %81, <4 x float> %85)
|
|
|
|
%87 = insertelement <4 x float> undef, float %86, i32 0
|
|
|
|
call void @llvm.R600.store.swizzle(<4 x float> %87, i32 2, i32 2)
|
|
|
|
ret void
|
|
|
|
}
|
|
|
|
|
|
|
|
; Function Attrs: readnone
|
|
|
|
declare float @llvm.AMDGPU.dp4(<4 x float>, <4 x float>) #1
|
|
|
|
|
|
|
|
; Function Attrs: readonly
|
|
|
|
declare float @fabs(float) #2
|
|
|
|
|
|
|
|
; Function Attrs: readnone
|
|
|
|
declare float @llvm.AMDGPU.rsq(float) #1
|
|
|
|
|
|
|
|
; Function Attrs: readnone
|
|
|
|
declare float @llvm.AMDIL.clamp.(float, float, float) #1
|
|
|
|
|
|
|
|
; Function Attrs: nounwind readonly
|
|
|
|
declare float @llvm.pow.f32(float, float) #3
|
|
|
|
|
|
|
|
declare void @llvm.R600.store.swizzle(<4 x float>, i32, i32)
|
|
|
|
|
|
|
|
attributes #0 = { "ShaderType"="1" }
|
|
|
|
attributes #1 = { readnone }
|
|
|
|
attributes #2 = { readonly }
|
|
|
|
attributes #3 = { nounwind readonly }
|