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