xref: /llvm-project/llvm/test/Transforms/InstSimplify/ConstProp/copysign.ll (revision b280ee1dd7e9b36ae7aaa3953556e4b7a7f31a29)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=instsimplify < %s | FileCheck %s
3
4declare float @llvm.copysign.f32(float, float)
5declare double @llvm.copysign.f64(double, double)
6declare bfloat @llvm.copysign.bf16(bfloat, bfloat)
7declare fp128 @llvm.copysign.f128(fp128, fp128)
8declare ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128, ppc_fp128)
9
10define float @f32_01() {
11; CHECK-LABEL: @f32_01(
12; CHECK-NEXT:    ret float -1.000000e+00
13;
14  %x = call float @llvm.copysign.f32(float 1.0, float -2.0)
15  ret float %x
16}
17
18define float @f32_02() {
19; CHECK-LABEL: @f32_02(
20; CHECK-NEXT:    ret float 2.000000e+00
21;
22  %x = call float @llvm.copysign.f32(float -2.0, float 1.0)
23  ret float %x
24}
25
26define float @f32_03() {
27; CHECK-LABEL: @f32_03(
28; CHECK-NEXT:    ret float -2.000000e+00
29;
30  %x = call float @llvm.copysign.f32(float -2.0, float -1.0)
31  ret float %x
32}
33
34define double @f64_01() {
35; CHECK-LABEL: @f64_01(
36; CHECK-NEXT:    ret double -1.000000e+00
37;
38  %x = call double @llvm.copysign.f64(double 1.0, double -2.0)
39  ret double %x
40}
41
42define double @f64_02() {
43; CHECK-LABEL: @f64_02(
44; CHECK-NEXT:    ret double 1.000000e+00
45;
46  %x = call double @llvm.copysign.f64(double -1.0, double 2.0)
47  ret double %x
48}
49
50define double @f64_03() {
51; CHECK-LABEL: @f64_03(
52; CHECK-NEXT:    ret double -1.000000e+00
53;
54  %x = call double @llvm.copysign.f64(double -1.0, double -2.0)
55  ret double %x
56}
57
58define bfloat @bf16_01() {
59; CHECK-LABEL: @bf16_01(
60; CHECK-NEXT:    ret bfloat 0xRBF80
61;
62  %x = call bfloat @llvm.copysign.bf16(bfloat 1.0, bfloat -2.0)
63  ret bfloat %x
64}
65
66define bfloat @bf16_02() {
67; CHECK-LABEL: @bf16_02(
68; CHECK-NEXT:    ret bfloat 0xR4000
69;
70  %x = call bfloat @llvm.copysign.bf16(bfloat -2.0, bfloat 1.0)
71  ret bfloat %x
72}
73
74define bfloat @bf16_03() {
75; CHECK-LABEL: @bf16_03(
76; CHECK-NEXT:    ret bfloat 0xRC000
77;
78  %x = call bfloat @llvm.copysign.bf16(bfloat -2.0, bfloat -1.0)
79  ret bfloat %x
80}
81
82define fp128 @f128_01() {
83; CHECK-LABEL: @f128_01(
84; CHECK-NEXT:    ret fp128 0xL00000000000000008000000000000001
85;
86  %x = call fp128 @llvm.copysign.f128(fp128 0xL00000000000000000000000000000001, fp128 0xL00000000000000008000000000000002)
87  ret fp128 %x
88}
89
90define fp128 @f128_02() {
91; CHECK-LABEL: @f128_02(
92; CHECK-NEXT:    ret fp128 0xL00000000000000000000000000000003
93;
94  %x = call fp128 @llvm.copysign.f128(fp128 0xL00000000000000008000000000000003, fp128 0xL00000000000000000000000000000004)
95  ret fp128 %x
96}
97
98define fp128 @f128_03() {
99; CHECK-LABEL: @f128_03(
100; CHECK-NEXT:    ret fp128 0xL00000000000000008000000000000005
101;
102  %x = call fp128 @llvm.copysign.f128(fp128 0xL00000000000000008000000000000005, fp128 0xL00000000000000008000000000000006)
103  ret fp128 %x
104}
105
106define ppc_fp128 @ppc128_01() {
107; CHECK-LABEL: @ppc128_01(
108; CHECK-NEXT:    ret ppc_fp128 0xM80000000000000008000000000000001
109;
110  %x = call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 0xM00000000000000000000000000000001, ppc_fp128 0xM80000000000000000000000000000002)
111  ret ppc_fp128 %x
112}
113
114define ppc_fp128 @ppc128_02() {
115; CHECK-LABEL: @ppc128_02(
116; CHECK-NEXT:    ret ppc_fp128 0xM00000000000000008000000000000003
117;
118  %x = call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 0xM80000000000000000000000000000003, ppc_fp128 0xM00000000000000000000000000000004)
119  ret ppc_fp128 %x
120}
121
122define ppc_fp128 @ppc128_03() {
123; CHECK-LABEL: @ppc128_03(
124; CHECK-NEXT:    ret ppc_fp128 0xM80000000000000000000000000000005
125;
126  %x = call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 0xM80000000000000000000000000000005, ppc_fp128 0xM80000000000000000000000000000006)
127  ret ppc_fp128 %x
128}
129