comparison test/CodeGen/SystemZ/fp-mul-08.ll @ 95:afa8332a0e37 LLVM3.8

LLVM 3.8
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 13 Oct 2015 17:48:58 +0900
parents 95c75e76d11b
children 803732b1fca8
comparison
equal deleted inserted replaced
84:f3e34b893a5f 95:afa8332a0e37
15 define float @f2(float %f1, float *%ptr, float %acc) { 15 define float @f2(float %f1, float *%ptr, float %acc) {
16 ; CHECK-LABEL: f2: 16 ; CHECK-LABEL: f2:
17 ; CHECK: mseb %f2, %f0, 0(%r2) 17 ; CHECK: mseb %f2, %f0, 0(%r2)
18 ; CHECK: ler %f0, %f2 18 ; CHECK: ler %f0, %f2
19 ; CHECK: br %r14 19 ; CHECK: br %r14
20 %f2 = load float *%ptr 20 %f2 = load float , float *%ptr
21 %negacc = fsub float -0.0, %acc 21 %negacc = fsub float -0.0, %acc
22 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc) 22 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)
23 ret float %res 23 ret float %res
24 } 24 }
25 25
26 define float @f3(float %f1, float *%base, float %acc) { 26 define float @f3(float %f1, float *%base, float %acc) {
27 ; CHECK-LABEL: f3: 27 ; CHECK-LABEL: f3:
28 ; CHECK: mseb %f2, %f0, 4092(%r2) 28 ; CHECK: mseb %f2, %f0, 4092(%r2)
29 ; CHECK: ler %f0, %f2 29 ; CHECK: ler %f0, %f2
30 ; CHECK: br %r14 30 ; CHECK: br %r14
31 %ptr = getelementptr float *%base, i64 1023 31 %ptr = getelementptr float, float *%base, i64 1023
32 %f2 = load float *%ptr 32 %f2 = load float , float *%ptr
33 %negacc = fsub float -0.0, %acc 33 %negacc = fsub float -0.0, %acc
34 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc) 34 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)
35 ret float %res 35 ret float %res
36 } 36 }
37 37
42 ; CHECK-LABEL: f4: 42 ; CHECK-LABEL: f4:
43 ; CHECK: aghi %r2, 4096 43 ; CHECK: aghi %r2, 4096
44 ; CHECK: mseb %f2, %f0, 0(%r2) 44 ; CHECK: mseb %f2, %f0, 0(%r2)
45 ; CHECK: ler %f0, %f2 45 ; CHECK: ler %f0, %f2
46 ; CHECK: br %r14 46 ; CHECK: br %r14
47 %ptr = getelementptr float *%base, i64 1024 47 %ptr = getelementptr float, float *%base, i64 1024
48 %f2 = load float *%ptr 48 %f2 = load float , float *%ptr
49 %negacc = fsub float -0.0, %acc 49 %negacc = fsub float -0.0, %acc
50 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc) 50 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)
51 ret float %res 51 ret float %res
52 } 52 }
53 53
58 ; CHECK-LABEL: f5: 58 ; CHECK-LABEL: f5:
59 ; CHECK: aghi %r2, -4 59 ; CHECK: aghi %r2, -4
60 ; CHECK: mseb %f2, %f0, 0(%r2) 60 ; CHECK: mseb %f2, %f0, 0(%r2)
61 ; CHECK: ler %f0, %f2 61 ; CHECK: ler %f0, %f2
62 ; CHECK: br %r14 62 ; CHECK: br %r14
63 %ptr = getelementptr float *%base, i64 -1 63 %ptr = getelementptr float, float *%base, i64 -1
64 %f2 = load float *%ptr 64 %f2 = load float , float *%ptr
65 %negacc = fsub float -0.0, %acc 65 %negacc = fsub float -0.0, %acc
66 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc) 66 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)
67 ret float %res 67 ret float %res
68 } 68 }
69 69
71 ; CHECK-LABEL: f6: 71 ; CHECK-LABEL: f6:
72 ; CHECK: sllg %r1, %r3, 2 72 ; CHECK: sllg %r1, %r3, 2
73 ; CHECK: mseb %f2, %f0, 0(%r1,%r2) 73 ; CHECK: mseb %f2, %f0, 0(%r1,%r2)
74 ; CHECK: ler %f0, %f2 74 ; CHECK: ler %f0, %f2
75 ; CHECK: br %r14 75 ; CHECK: br %r14
76 %ptr = getelementptr float *%base, i64 %index 76 %ptr = getelementptr float, float *%base, i64 %index
77 %f2 = load float *%ptr 77 %f2 = load float , float *%ptr
78 %negacc = fsub float -0.0, %acc 78 %negacc = fsub float -0.0, %acc
79 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc) 79 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)
80 ret float %res 80 ret float %res
81 } 81 }
82 82
85 ; CHECK: sllg %r1, %r3, 2 85 ; CHECK: sllg %r1, %r3, 2
86 ; CHECK: mseb %f2, %f0, 4092({{%r1,%r2|%r2,%r1}}) 86 ; CHECK: mseb %f2, %f0, 4092({{%r1,%r2|%r2,%r1}})
87 ; CHECK: ler %f0, %f2 87 ; CHECK: ler %f0, %f2
88 ; CHECK: br %r14 88 ; CHECK: br %r14
89 %index2 = add i64 %index, 1023 89 %index2 = add i64 %index, 1023
90 %ptr = getelementptr float *%base, i64 %index2 90 %ptr = getelementptr float, float *%base, i64 %index2
91 %f2 = load float *%ptr 91 %f2 = load float , float *%ptr
92 %negacc = fsub float -0.0, %acc 92 %negacc = fsub float -0.0, %acc
93 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc) 93 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)
94 ret float %res 94 ret float %res
95 } 95 }
96 96
100 ; CHECK: lay %r1, 4096({{%r1,%r2|%r2,%r1}}) 100 ; CHECK: lay %r1, 4096({{%r1,%r2|%r2,%r1}})
101 ; CHECK: mseb %f2, %f0, 0(%r1) 101 ; CHECK: mseb %f2, %f0, 0(%r1)
102 ; CHECK: ler %f0, %f2 102 ; CHECK: ler %f0, %f2
103 ; CHECK: br %r14 103 ; CHECK: br %r14
104 %index2 = add i64 %index, 1024 104 %index2 = add i64 %index, 1024
105 %ptr = getelementptr float *%base, i64 %index2 105 %ptr = getelementptr float, float *%base, i64 %index2
106 %f2 = load float *%ptr 106 %f2 = load float , float *%ptr
107 %negacc = fsub float -0.0, %acc 107 %negacc = fsub float -0.0, %acc
108 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc) 108 %res = call float @llvm.fma.f32 (float %f1, float %f2, float %negacc)
109 ret float %res 109 ret float %res
110 } 110 }