blob: 5d9820e20baafa25b47c28ebc937f29278386521 [file] [log] [blame]
Dmitry Venikov3d8cd342018-01-03 14:37:42 +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
7define double @log_exp(double %a) {
8; CHECK-LABEL: @log_exp(
9; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.exp.f64(double [[A:%.*]])
10; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log.f64(double [[TMP1]])
11; CHECK-NEXT: ret double [[TMP2]]
12;
13 %1 = call double @llvm.exp.f64(double %a)
14 %2 = call double @llvm.log.f64(double %1)
15 ret double %2
16}
17
18define double @log_exp_fast(double %a) {
19; CHECK-LABEL: @log_exp_fast(
20; CHECK-NEXT: ret double [[A:%.*]]
21;
22 %1 = call fast double @llvm.exp.f64(double %a)
23 %2 = call fast double @llvm.log.f64(double %1)
24 ret double %2
25}
26
27define double @log_fast_exp_strict(double %a) {
28; CHECK-LABEL: @log_fast_exp_strict(
29; CHECK-NEXT: ret double [[A:%.*]]
30;
31 %1 = call double @llvm.exp.f64(double %a)
32 %2 = call fast double @llvm.log.f64(double %1)
33 ret double %2
34}
35
36define double @log_strict_exp_fast(double %a) {
37; CHECK-LABEL: @log_strict_exp_fast(
38; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.exp.f64(double [[A:%.*]])
39; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log.f64(double [[TMP1]])
40; CHECK-NEXT: ret double [[TMP2]]
41;
42 %1 = call fast double @llvm.exp.f64(double %a)
43 %2 = call double @llvm.log.f64(double %1)
44 ret double %2
45}
46
47define double @log_exp_log_exp(double %a) {
48; CHECK-LABEL: @log_exp_log_exp(
49; CHECK-NEXT: [[TMP1:%.*]] = call double @llvm.exp.f64(double [[A:%.*]])
50; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.log.f64(double [[TMP1]])
51; CHECK-NEXT: [[TMP3:%.*]] = call double @llvm.exp.f64(double [[TMP2]])
52; CHECK-NEXT: [[TMP4:%.*]] = call double @llvm.log.f64(double [[TMP3]])
53; CHECK-NEXT: ret double [[TMP4]]
54;
55 %1 = call double @llvm.exp.f64(double %a)
56 %2 = call double @llvm.log.f64(double %1)
57 %3 = call double @llvm.exp.f64(double %2)
58 %4 = call double @llvm.log.f64(double %3)
59 ret double %4
60}
61
62define double @log_exp_log_exp_fast(double %a) {
63; CHECK-LABEL: @log_exp_log_exp_fast(
64; CHECK-NEXT: ret double [[A:%.*]]
65;
66 %1 = call fast double @llvm.exp.f64(double %a)
67 %2 = call fast double @llvm.log.f64(double %1)
68 %3 = call fast double @llvm.exp.f64(double %2)
69 %4 = call fast double @llvm.log.f64(double %3)
70 ret double %4
71}