xref: /llvm-project/clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-swdiv_nochk.c (revision 39db5e1ed87363a9ffea81e53520b542201b3262)
1 // REQUIRES: powerpc-registered-target
2 // RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu \
3 // RUN:   -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s
4 // RUN: %clang_cc1 -triple powerpc64-unknown-aix \
5 // RUN:   -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s
6 
7 extern double a;
8 extern double b;
9 extern double c;
10 extern float d;
11 extern float e;
12 extern float f;
13 
14 // CHECK-LABEL: @test_swdiv_nochk(
15 // CHECK:    [[TMP0:%.*]] = load double, ptr @a, align 8
16 // CHECK-NEXT:    [[TMP1:%.*]] = load double, ptr @b, align 8
17 // CHECK-NEXT:    [[SWDIV_NOCHK:%.*]] = fdiv fast double [[TMP0]], [[TMP1]]
18 // CHECK-NEXT:    ret double [[SWDIV_NOCHK]]
19 //
test_swdiv_nochk()20 double test_swdiv_nochk() {
21   return __swdiv_nochk(a, b);
22 }
23 
24 // CHECK-LABEL: @test_swdivs_nochk(
25 // CHECK:    [[TMP0:%.*]] = load float, ptr @d, align 4
26 // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr @e, align 4
27 // CHECK-NEXT:    [[SWDIV_NOCHK:%.*]] = fdiv fast float [[TMP0]], [[TMP1]]
28 // CHECK-NEXT:    ret float [[SWDIV_NOCHK]]
29 //
test_swdivs_nochk()30 float test_swdivs_nochk() {
31   return __swdivs_nochk(d, e);
32 }
33 
34 // CHECK-LABEL: @test_flags_swdiv_nochk(
35 // CHECK:    [[TMP0:%.*]] = load double, ptr @a, align 8
36 // CHECK-NEXT:    [[TMP1:%.*]] = load double, ptr @b, align 8
37 // CHECK-NEXT:    [[SWDIV_NOCHK:%.*]] = fdiv fast double [[TMP0]], [[TMP1]]
38 // CHECK-NEXT:    [[TMP2:%.*]] = load double, ptr @c, align 8
39 // CHECK-NEXT:    [[ADD:%.*]] = fadd double [[SWDIV_NOCHK]], [[TMP2]]
40 // CHECK-NEXT:    ret double [[ADD]]
41 //
test_flags_swdiv_nochk()42 double test_flags_swdiv_nochk() {
43   return __swdiv_nochk(a, b) + c;
44 }
45 
46 // CHECK-LABEL: @test_flags_swdivs_nochk(
47 // CHECK:    [[TMP0:%.*]] = load float, ptr @d, align 4
48 // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr @e, align 4
49 // CHECK-NEXT:    [[SWDIV_NOCHK:%.*]] = fdiv fast float [[TMP0]], [[TMP1]]
50 // CHECK-NEXT:    [[TMP2:%.*]] = load float, ptr @f, align 4
51 // CHECK-NEXT:    [[ADD:%.*]] = fadd float [[SWDIV_NOCHK]], [[TMP2]]
52 // CHECK-NEXT:    ret float [[ADD]]
53 //
test_flags_swdivs_nochk()54 float test_flags_swdivs_nochk() {
55   return __swdivs_nochk(d, e) + f;
56 }
57 
58 // CHECK-LABEL: @test_builtin_ppc_swdiv_nochk(
59 // CHECK:    [[TMP0:%.*]] = load double, ptr @a, align 8
60 // CHECK-NEXT:    [[TMP1:%.*]] = load double, ptr @b, align 8
61 // CHECK-NEXT:    [[SWDIV_NOCHK:%.*]] = fdiv fast double [[TMP0]], [[TMP1]]
62 // CHECK-NEXT:    ret double [[SWDIV_NOCHK]]
63 //
test_builtin_ppc_swdiv_nochk()64 double test_builtin_ppc_swdiv_nochk() {
65   return __builtin_ppc_swdiv_nochk(a, b);
66 }
67 
68 // CHECK-LABEL: @test_builtin_ppc_swdivs_nochk(
69 // CHECK:    [[TMP0:%.*]] = load float, ptr @d, align 4
70 // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr @e, align 4
71 // CHECK-NEXT:    [[SWDIV_NOCHK:%.*]] = fdiv fast float [[TMP0]], [[TMP1]]
72 // CHECK-NEXT:    ret float [[SWDIV_NOCHK]]
73 //
test_builtin_ppc_swdivs_nochk()74 float test_builtin_ppc_swdivs_nochk() {
75   return __builtin_ppc_swdivs_nochk(d, e);
76 }
77 
78 // CHECK-LABEL: @test_flags_builtin_ppc_swdiv_nochk(
79 // CHECK:    [[TMP0:%.*]] = load double, ptr @a, align 8
80 // CHECK-NEXT:    [[TMP1:%.*]] = load double, ptr @b, align 8
81 // CHECK-NEXT:    [[SWDIV_NOCHK:%.*]] = fdiv fast double [[TMP0]], [[TMP1]]
82 // CHECK-NEXT:    [[TMP2:%.*]] = load double, ptr @c, align 8
83 // CHECK-NEXT:    [[ADD:%.*]] = fadd double [[SWDIV_NOCHK]], [[TMP2]]
84 // CHECK-NEXT:    ret double [[ADD]]
85 //
test_flags_builtin_ppc_swdiv_nochk()86 double test_flags_builtin_ppc_swdiv_nochk() {
87   return __builtin_ppc_swdiv_nochk(a, b) + c;
88 }
89 
90 // CHECK-LABEL: @test_flags_builtin_ppc_swdivs_nochk(
91 // CHECK:    [[TMP0:%.*]] = load float, ptr @d, align 4
92 // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr @e, align 4
93 // CHECK-NEXT:    [[SWDIV_NOCHK:%.*]] = fdiv fast float [[TMP0]], [[TMP1]]
94 // CHECK-NEXT:    [[TMP2:%.*]] = load float, ptr @f, align 4
95 // CHECK-NEXT:    [[ADD:%.*]] = fadd float [[SWDIV_NOCHK]], [[TMP2]]
96 // CHECK-NEXT:    ret float [[ADD]]
97 //
test_flags_builtin_ppc_swdivs_nochk()98 float test_flags_builtin_ppc_swdivs_nochk() {
99   return __builtin_ppc_swdivs_nochk(d, e) + f;
100 }
101