blob: 826ec42b31c223f96685c7e24f384fbd4c5ec546 [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)
Sanjay Patel246d76922018-02-12 23:51:23 +00006declare double @llvm.log2.f64(double)
7declare double @llvm.exp2.f64(double)
Sanjay Patelde3e8892018-02-12 23:18:11 +00008
Sanjay Patel246d76922018-02-12 23:51:23 +00009define double @log_reassoc_exp_strict(double %a) {
10; CHECK-LABEL: @log_reassoc_exp_strict(
Sanjay Patelc5d59332018-02-12 23:39:10 +000011; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +000012;
13 %1 = call double @llvm.exp.f64(double %a)
Sanjay Patel246d76922018-02-12 23:51:23 +000014 %2 = call reassoc double @llvm.log.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +000015 ret double %2
16}
17
Sanjay Patel246d76922018-02-12 23:51:23 +000018define double @log_strict_exp_reassoc(double %a) {
19; CHECK-LABEL: @log_strict_exp_reassoc(
20; CHECK-NEXT: [[TMP1:%.*]] = call reassoc double @llvm.exp.f64(double [[A:%.*]])
Sanjay Patelde3e8892018-02-12 23:18:11 +000021; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log.f64(double [[TMP1]])
22; CHECK-NEXT: ret double [[TMP2]]
23;
Sanjay Patel246d76922018-02-12 23:51:23 +000024 %1 = call reassoc double @llvm.exp.f64(double %a)
Sanjay Patelde3e8892018-02-12 23:18:11 +000025 %2 = call double @llvm.log.f64(double %1)
26 ret double %2
27}
28
29define double @log_exp_log_exp(double %a) {
30; CHECK-LABEL: @log_exp_log_exp(
31; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.exp.f64(double [[A:%.*]])
32; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log.f64(double [[TMP1]])
33; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.exp.f64(double [[TMP2]])
34; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.log.f64(double [[TMP3]])
35; CHECK-NEXT: ret double [[TMP4]]
36;
37 %1 = call double @llvm.exp.f64(double %a)
38 %2 = call double @llvm.log.f64(double %1)
39 %3 = call double @llvm.exp.f64(double %2)
40 %4 = call double @llvm.log.f64(double %3)
41 ret double %4
42}
43
Sanjay Patel246d76922018-02-12 23:51:23 +000044define double @log_exp_log_exp_reassoc(double %a) {
45; CHECK-LABEL: @log_exp_log_exp_reassoc(
Sanjay Patelc5d59332018-02-12 23:39:10 +000046; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +000047;
48 %1 = call double @llvm.exp.f64(double %a)
Sanjay Patel246d76922018-02-12 23:51:23 +000049 %2 = call reassoc double @llvm.log.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +000050 %3 = call double @llvm.exp.f64(double %2)
Sanjay Patel246d76922018-02-12 23:51:23 +000051 %4 = call reassoc double @llvm.log.f64(double %3)
Sanjay Patelde3e8892018-02-12 23:18:11 +000052 ret double %4
53}
54
Sanjay Patel246d76922018-02-12 23:51:23 +000055define double @log2_reassoc_exp2_strict(double %a) {
56; CHECK-LABEL: @log2_reassoc_exp2_strict(
Sanjay Patelc5d59332018-02-12 23:39:10 +000057; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +000058;
59 %1 = call double @llvm.exp2.f64(double %a)
Sanjay Patel246d76922018-02-12 23:51:23 +000060 %2 = call reassoc double @llvm.log2.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +000061 ret double %2
62}
63
Sanjay Patel246d76922018-02-12 23:51:23 +000064define double @log2_strict_exp2_reassoc(double %a) {
65; CHECK-LABEL: @log2_strict_exp2_reassoc(
66; CHECK-NEXT: [[TMP1:%.*]] = call reassoc double @llvm.exp2.f64(double [[A:%.*]])
Sanjay Patelde3e8892018-02-12 23:18:11 +000067; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log2.f64(double [[TMP1]])
68; CHECK-NEXT: ret double [[TMP2]]
69;
Sanjay Patel246d76922018-02-12 23:51:23 +000070 %1 = call reassoc double @llvm.exp2.f64(double %a)
Sanjay Patelde3e8892018-02-12 23:18:11 +000071 %2 = call double @llvm.log2.f64(double %1)
72 ret double %2
73}
74
75define double @log2_exp2_log2_exp2(double %a) {
76; CHECK-LABEL: @log2_exp2_log2_exp2(
77; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.exp2.f64(double [[A:%.*]])
78; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log2.f64(double [[TMP1]])
79; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.exp2.f64(double [[TMP2]])
80; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.log2.f64(double [[TMP3]])
81; CHECK-NEXT: ret double [[TMP4]]
82;
83 %1 = call double @llvm.exp2.f64(double %a)
84 %2 = call double @llvm.log2.f64(double %1)
85 %3 = call double @llvm.exp2.f64(double %2)
86 %4 = call double @llvm.log2.f64(double %3)
87 ret double %4
88}
89
Sanjay Patel246d76922018-02-12 23:51:23 +000090define double @log2_exp2_log2_exp2_reassoc(double %a) {
91; CHECK-LABEL: @log2_exp2_log2_exp2_reassoc(
Sanjay Patelc5d59332018-02-12 23:39:10 +000092; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +000093;
94 %1 = call double @llvm.exp2.f64(double %a)
Sanjay Patel246d76922018-02-12 23:51:23 +000095 %2 = call reassoc double @llvm.log2.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +000096 %3 = call double @llvm.exp2.f64(double %2)
Sanjay Patel246d76922018-02-12 23:51:23 +000097 %4 = call reassoc double @llvm.log2.f64(double %3)
Sanjay Patelde3e8892018-02-12 23:18:11 +000098 ret double %4
99}
100
Sanjay Patel246d76922018-02-12 23:51:23 +0000101define double @exp_reassoc_log_strict(double %a) {
102; CHECK-LABEL: @exp_reassoc_log_strict(
Sanjay Patelc5d59332018-02-12 23:39:10 +0000103; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +0000104;
105 %1 = call double @llvm.log.f64(double %a)
Sanjay Patel246d76922018-02-12 23:51:23 +0000106 %2 = call reassoc double @llvm.exp.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000107 ret double %2
108}
109
Sanjay Patel246d76922018-02-12 23:51:23 +0000110define double @exp_strict_log_reassoc(double %a) {
111; CHECK-LABEL: @exp_strict_log_reassoc(
112; CHECK-NEXT: [[TMP1:%.*]] = call reassoc double @llvm.log.f64(double [[A:%.*]])
Sanjay Patelde3e8892018-02-12 23:18:11 +0000113; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.exp.f64(double [[TMP1]])
114; CHECK-NEXT: ret double [[TMP2]]
115;
Sanjay Patel246d76922018-02-12 23:51:23 +0000116 %1 = call reassoc double @llvm.log.f64(double %a)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000117 %2 = call double @llvm.exp.f64(double %1)
118 ret double %2
119}
120
121define double @exp_log_exp_log(double %a) {
122; CHECK-LABEL: @exp_log_exp_log(
123; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.log.f64(double [[A:%.*]])
124; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.exp.f64(double [[TMP1]])
125; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.log.f64(double [[TMP2]])
126; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.exp.f64(double [[TMP3]])
127; CHECK-NEXT: ret double [[TMP4]]
128;
129 %1 = call double @llvm.log.f64(double %a)
130 %2 = call double @llvm.exp.f64(double %1)
131 %3 = call double @llvm.log.f64(double %2)
132 %4 = call double @llvm.exp.f64(double %3)
133 ret double %4
134}
135
Sanjay Patel246d76922018-02-12 23:51:23 +0000136define double @exp_log_exp_log_reassoc(double %a) {
137; CHECK-LABEL: @exp_log_exp_log_reassoc(
Sanjay Patelc5d59332018-02-12 23:39:10 +0000138; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +0000139;
140 %1 = call double @llvm.log.f64(double %a)
Sanjay Patel246d76922018-02-12 23:51:23 +0000141 %2 = call reassoc double @llvm.exp.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000142 %3 = call double @llvm.log.f64(double %2)
Sanjay Patel246d76922018-02-12 23:51:23 +0000143 %4 = call reassoc double @llvm.exp.f64(double %3)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000144 ret double %4
145}
146
Sanjay Patel246d76922018-02-12 23:51:23 +0000147define double @exp2_reassoc_log2_strict(double %a) {
148; CHECK-LABEL: @exp2_reassoc_log2_strict(
Sanjay Patelc5d59332018-02-12 23:39:10 +0000149; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +0000150;
151 %1 = call double @llvm.log2.f64(double %a)
Sanjay Patel246d76922018-02-12 23:51:23 +0000152 %2 = call reassoc double @llvm.exp2.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000153 ret double %2
154}
155
Sanjay Patel246d76922018-02-12 23:51:23 +0000156define double @exp2_strict_log2_reassoc(double %a) {
157; CHECK-LABEL: @exp2_strict_log2_reassoc(
158; CHECK-NEXT: [[TMP1:%.*]] = call reassoc double @llvm.log2.f64(double [[A:%.*]])
Sanjay Patelde3e8892018-02-12 23:18:11 +0000159; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.exp2.f64(double [[TMP1]])
160; CHECK-NEXT: ret double [[TMP2]]
161;
Sanjay Patel246d76922018-02-12 23:51:23 +0000162 %1 = call reassoc double @llvm.log2.f64(double %a)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000163 %2 = call double @llvm.exp2.f64(double %1)
164 ret double %2
165}
166
167define double @exp2_log2_exp2_log2(double %a) {
168; CHECK-LABEL: @exp2_log2_exp2_log2(
169; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.log2.f64(double [[A:%.*]])
170; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.exp2.f64(double [[TMP1]])
171; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.log2.f64(double [[TMP2]])
172; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.exp2.f64(double [[TMP3]])
173; CHECK-NEXT: ret double [[TMP4]]
174;
175 %1 = call double @llvm.log2.f64(double %a)
176 %2 = call double @llvm.exp2.f64(double %1)
177 %3 = call double @llvm.log2.f64(double %2)
178 %4 = call double @llvm.exp2.f64(double %3)
179 ret double %4
180}
181
Sanjay Patel246d76922018-02-12 23:51:23 +0000182define double @exp2_log2_exp2_log2_reassoc(double %a) {
183; CHECK-LABEL: @exp2_log2_exp2_log2_reassoc(
Sanjay Patelc5d59332018-02-12 23:39:10 +0000184; CHECK-NEXT: ret double [[A:%.*]]
Sanjay Patelde3e8892018-02-12 23:18:11 +0000185;
186 %1 = call double @llvm.log2.f64(double %a)
Sanjay Patel246d76922018-02-12 23:51:23 +0000187 %2 = call reassoc double @llvm.exp2.f64(double %1)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000188 %3 = call double @llvm.log2.f64(double %2)
Sanjay Patel246d76922018-02-12 23:51:23 +0000189 %4 = call reassoc double @llvm.exp2.f64(double %3)
Sanjay Patelde3e8892018-02-12 23:18:11 +0000190 ret double %4
191}
192