blob: f91e4f093b7c115f01fcfa3c579a33b6b39e4c39 [file] [log] [blame]
Sanjay Patelde3e8892018-02-12 23:18:11 +00001; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -instsimplify -S | FileCheck %s
3
4declare double @llvm.log.f64(double)
5declare double @llvm.exp.f64(double)
6
Sanjay Patelc5d59332018-02-12 23:39:10 +00007define double @log_fast_exp_strict(double %a) {
8; CHECK-LABEL: @log_fast_exp_strict(
9; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +000010;
11 %1 = call double @llvm.exp.f64(double %a)
Sanjay Patelc5d59332018-02-12 23:39:10 +000012 %2 = call fast double @llvm.log.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +000013 ret double %2
14}
15
Sanjay Patelc5d59332018-02-12 23:39:10 +000016define double @log_strict_exp_fast(double %a) {
17; CHECK-LABEL: @log_strict_exp_fast(
18; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.exp.f64(double [[A:%.*]])
Sanjay Patelde3e8892018-02-12 23:18:11 +000019; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log.f64(double [[TMP1]])
20; CHECK-NEXT: ret double [[TMP2]]
21;
Sanjay Patelc5d59332018-02-12 23:39:10 +000022 %1 = call fast double @llvm.exp.f64(double %a)
Sanjay Patelde3e8892018-02-12 23:18:11 +000023 %2 = call double @llvm.log.f64(double %1)
24 ret double %2
25}
26
27define double @log_exp_log_exp(double %a) {
28; CHECK-LABEL: @log_exp_log_exp(
29; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.exp.f64(double [[A:%.*]])
30; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log.f64(double [[TMP1]])
31; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.exp.f64(double [[TMP2]])
32; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.log.f64(double [[TMP3]])
33; CHECK-NEXT: ret double [[TMP4]]
34;
35 %1 = call double @llvm.exp.f64(double %a)
36 %2 = call double @llvm.log.f64(double %1)
37 %3 = call double @llvm.exp.f64(double %2)
38 %4 = call double @llvm.log.f64(double %3)
39 ret double %4
40}
41
Sanjay Patelc5d59332018-02-12 23:39:10 +000042define double @log_exp_log_exp_fast(double %a) {
43; CHECK-LABEL: @log_exp_log_exp_fast(
44; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +000045;
46 %1 = call double @llvm.exp.f64(double %a)
Sanjay Patelc5d59332018-02-12 23:39:10 +000047 %2 = call fast double @llvm.log.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +000048 %3 = call double @llvm.exp.f64(double %2)
Sanjay Patelc5d59332018-02-12 23:39:10 +000049 %4 = call fast double @llvm.log.f64(double %3)
Sanjay Patelde3e8892018-02-12 23:18:11 +000050 ret double %4
51}
52
53declare double @llvm.log2.f64(double)
54declare double @llvm.exp2.f64(double)
55
Sanjay Patelc5d59332018-02-12 23:39:10 +000056define double @log2_fast_exp2_strict(double %a) {
57; CHECK-LABEL: @log2_fast_exp2_strict(
58; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +000059;
60 %1 = call double @llvm.exp2.f64(double %a)
Sanjay Patelc5d59332018-02-12 23:39:10 +000061 %2 = call fast double @llvm.log2.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +000062 ret double %2
63}
64
Sanjay Patelc5d59332018-02-12 23:39:10 +000065define double @log2_strict_exp2_fast(double %a) {
66; CHECK-LABEL: @log2_strict_exp2_fast(
67; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.exp2.f64(double [[A:%.*]])
Sanjay Patelde3e8892018-02-12 23:18:11 +000068; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log2.f64(double [[TMP1]])
69; CHECK-NEXT: ret double [[TMP2]]
70;
Sanjay Patelc5d59332018-02-12 23:39:10 +000071 %1 = call fast double @llvm.exp2.f64(double %a)
Sanjay Patelde3e8892018-02-12 23:18:11 +000072 %2 = call double @llvm.log2.f64(double %1)
73 ret double %2
74}
75
76define double @log2_exp2_log2_exp2(double %a) {
77; CHECK-LABEL: @log2_exp2_log2_exp2(
78; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.exp2.f64(double [[A:%.*]])
79; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log2.f64(double [[TMP1]])
80; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.exp2.f64(double [[TMP2]])
81; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.log2.f64(double [[TMP3]])
82; CHECK-NEXT: ret double [[TMP4]]
83;
84 %1 = call double @llvm.exp2.f64(double %a)
85 %2 = call double @llvm.log2.f64(double %1)
86 %3 = call double @llvm.exp2.f64(double %2)
87 %4 = call double @llvm.log2.f64(double %3)
88 ret double %4
89}
90
Sanjay Patelc5d59332018-02-12 23:39:10 +000091define double @log2_exp2_log2_exp2_fast(double %a) {
92; CHECK-LABEL: @log2_exp2_log2_exp2_fast(
93; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +000094;
95 %1 = call double @llvm.exp2.f64(double %a)
Sanjay Patelc5d59332018-02-12 23:39:10 +000096 %2 = call fast double @llvm.log2.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +000097 %3 = call double @llvm.exp2.f64(double %2)
Sanjay Patelc5d59332018-02-12 23:39:10 +000098 %4 = call fast double @llvm.log2.f64(double %3)
Sanjay Patelde3e8892018-02-12 23:18:11 +000099 ret double %4
100}
101
Sanjay Patelc5d59332018-02-12 23:39:10 +0000102define double @exp_fast_log_strict(double %a) {
103; CHECK-LABEL: @exp_fast_log_strict(
104; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +0000105;
106 %1 = call double @llvm.log.f64(double %a)
Sanjay Patelc5d59332018-02-12 23:39:10 +0000107 %2 = call fast double @llvm.exp.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000108 ret double %2
109}
110
Sanjay Patelc5d59332018-02-12 23:39:10 +0000111define double @exp_strict_log_fast(double %a) {
112; CHECK-LABEL: @exp_strict_log_fast(
113; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.log.f64(double [[A:%.*]])
Sanjay Patelde3e8892018-02-12 23:18:11 +0000114; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.exp.f64(double [[TMP1]])
115; CHECK-NEXT: ret double [[TMP2]]
116;
Sanjay Patelc5d59332018-02-12 23:39:10 +0000117 %1 = call fast double @llvm.log.f64(double %a)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000118 %2 = call double @llvm.exp.f64(double %1)
119 ret double %2
120}
121
122define double @exp_log_exp_log(double %a) {
123; CHECK-LABEL: @exp_log_exp_log(
124; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.log.f64(double [[A:%.*]])
125; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.exp.f64(double [[TMP1]])
126; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.log.f64(double [[TMP2]])
127; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.exp.f64(double [[TMP3]])
128; CHECK-NEXT: ret double [[TMP4]]
129;
130 %1 = call double @llvm.log.f64(double %a)
131 %2 = call double @llvm.exp.f64(double %1)
132 %3 = call double @llvm.log.f64(double %2)
133 %4 = call double @llvm.exp.f64(double %3)
134 ret double %4
135}
136
Sanjay Patelc5d59332018-02-12 23:39:10 +0000137define double @exp_log_exp_log_fast(double %a) {
138; CHECK-LABEL: @exp_log_exp_log_fast(
139; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +0000140;
141 %1 = call double @llvm.log.f64(double %a)
Sanjay Patelc5d59332018-02-12 23:39:10 +0000142 %2 = call fast double @llvm.exp.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000143 %3 = call double @llvm.log.f64(double %2)
Sanjay Patelc5d59332018-02-12 23:39:10 +0000144 %4 = call fast double @llvm.exp.f64(double %3)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000145 ret double %4
146}
147
Sanjay Patelc5d59332018-02-12 23:39:10 +0000148define double @exp2_fast_log2_strict(double %a) {
149; CHECK-LABEL: @exp2_fast_log2_strict(
150; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +0000151;
152 %1 = call double @llvm.log2.f64(double %a)
Sanjay Patelc5d59332018-02-12 23:39:10 +0000153 %2 = call fast double @llvm.exp2.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000154 ret double %2
155}
156
Sanjay Patelc5d59332018-02-12 23:39:10 +0000157define double @exp2_strict_log2_fast(double %a) {
158; CHECK-LABEL: @exp2_strict_log2_fast(
159; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.log2.f64(double [[A:%.*]])
Sanjay Patelde3e8892018-02-12 23:18:11 +0000160; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.exp2.f64(double [[TMP1]])
161; CHECK-NEXT: ret double [[TMP2]]
162;
Sanjay Patelc5d59332018-02-12 23:39:10 +0000163 %1 = call fast double @llvm.log2.f64(double %a)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000164 %2 = call double @llvm.exp2.f64(double %1)
165 ret double %2
166}
167
168define double @exp2_log2_exp2_log2(double %a) {
169; CHECK-LABEL: @exp2_log2_exp2_log2(
170; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.log2.f64(double [[A:%.*]])
171; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.exp2.f64(double [[TMP1]])
172; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.log2.f64(double [[TMP2]])
173; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.exp2.f64(double [[TMP3]])
174; CHECK-NEXT: ret double [[TMP4]]
175;
176 %1 = call double @llvm.log2.f64(double %a)
177 %2 = call double @llvm.exp2.f64(double %1)
178 %3 = call double @llvm.log2.f64(double %2)
179 %4 = call double @llvm.exp2.f64(double %3)
180 ret double %4
181}
182
Sanjay Patelc5d59332018-02-12 23:39:10 +0000183define double @exp2_log2_exp2_log2_fast(double %a) {
184; CHECK-LABEL: @exp2_log2_exp2_log2_fast(
185; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +0000186;
187 %1 = call double @llvm.log2.f64(double %a)
Sanjay Patelc5d59332018-02-12 23:39:10 +0000188 %2 = call fast double @llvm.exp2.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000189 %3 = call double @llvm.log2.f64(double %2)
Sanjay Patelc5d59332018-02-12 23:39:10 +0000190 %4 = call fast double @llvm.exp2.f64(double %3)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000191 ret double %4
192}
193