[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / Transforms / InstSimplify / ConstProp / copysign.ll
blob051cb84fd0daffc7d36ce297cd422d2d4b7db50a
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -S -passes=instsimplify < %s | FileCheck %s
4 declare float @llvm.copysign.f32(float, float)
5 declare double @llvm.copysign.f64(double, double)
6 declare bfloat @llvm.copysign.bf16(bfloat, bfloat)
7 declare fp128 @llvm.copysign.f128(fp128, fp128)
8 declare ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128, ppc_fp128)
10 define float @f32_01() {
11 ; CHECK-LABEL: @f32_01(
12 ; CHECK-NEXT:    ret float -1.000000e+00
14   %x = call float @llvm.copysign.f32(float 1.0, float -2.0)
15   ret float %x
18 define float @f32_02() {
19 ; CHECK-LABEL: @f32_02(
20 ; CHECK-NEXT:    ret float 2.000000e+00
22   %x = call float @llvm.copysign.f32(float -2.0, float 1.0)
23   ret float %x
26 define float @f32_03() {
27 ; CHECK-LABEL: @f32_03(
28 ; CHECK-NEXT:    ret float -2.000000e+00
30   %x = call float @llvm.copysign.f32(float -2.0, float -1.0)
31   ret float %x
34 define double @f64_01() {
35 ; CHECK-LABEL: @f64_01(
36 ; CHECK-NEXT:    ret double -1.000000e+00
38   %x = call double @llvm.copysign.f64(double 1.0, double -2.0)
39   ret double %x
42 define double @f64_02() {
43 ; CHECK-LABEL: @f64_02(
44 ; CHECK-NEXT:    ret double 1.000000e+00
46   %x = call double @llvm.copysign.f64(double -1.0, double 2.0)
47   ret double %x
50 define double @f64_03() {
51 ; CHECK-LABEL: @f64_03(
52 ; CHECK-NEXT:    ret double -1.000000e+00
54   %x = call double @llvm.copysign.f64(double -1.0, double -2.0)
55   ret double %x
58 define bfloat @bf16_01() {
59 ; CHECK-LABEL: @bf16_01(
60 ; CHECK-NEXT:    ret bfloat 0xRBF80
62   %x = call bfloat @llvm.copysign.bf16(bfloat 1.0, bfloat -2.0)
63   ret bfloat %x
66 define bfloat @bf16_02() {
67 ; CHECK-LABEL: @bf16_02(
68 ; CHECK-NEXT:    ret bfloat 0xR4000
70   %x = call bfloat @llvm.copysign.bf16(bfloat -2.0, bfloat 1.0)
71   ret bfloat %x
74 define bfloat @bf16_03() {
75 ; CHECK-LABEL: @bf16_03(
76 ; CHECK-NEXT:    ret bfloat 0xRC000
78   %x = call bfloat @llvm.copysign.bf16(bfloat -2.0, bfloat -1.0)
79   ret bfloat %x
82 define fp128 @f128_01() {
83 ; CHECK-LABEL: @f128_01(
84 ; CHECK-NEXT:    ret fp128 0xL00000000000000008000000000000001
86   %x = call fp128 @llvm.copysign.f128(fp128 0xL00000000000000000000000000000001, fp128 0xL00000000000000008000000000000002)
87   ret fp128 %x
90 define fp128 @f128_02() {
91 ; CHECK-LABEL: @f128_02(
92 ; CHECK-NEXT:    ret fp128 0xL00000000000000000000000000000003
94   %x = call fp128 @llvm.copysign.f128(fp128 0xL00000000000000008000000000000003, fp128 0xL00000000000000000000000000000004)
95   ret fp128 %x
98 define fp128 @f128_03() {
99 ; CHECK-LABEL: @f128_03(
100 ; CHECK-NEXT:    ret fp128 0xL00000000000000008000000000000005
102   %x = call fp128 @llvm.copysign.f128(fp128 0xL00000000000000008000000000000005, fp128 0xL00000000000000008000000000000006)
103   ret fp128 %x
106 define ppc_fp128 @ppc128_01() {
107 ; CHECK-LABEL: @ppc128_01(
108 ; CHECK-NEXT:    ret ppc_fp128 0xM80000000000000008000000000000001
110   %x = call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 0xM00000000000000000000000000000001, ppc_fp128 0xM80000000000000000000000000000002)
111   ret ppc_fp128 %x
114 define ppc_fp128 @ppc128_02() {
115 ; CHECK-LABEL: @ppc128_02(
116 ; CHECK-NEXT:    ret ppc_fp128 0xM00000000000000008000000000000003
118   %x = call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 0xM80000000000000000000000000000003, ppc_fp128 0xM00000000000000000000000000000004)
119   ret ppc_fp128 %x
122 define ppc_fp128 @ppc128_03() {
123 ; CHECK-LABEL: @ppc128_03(
124 ; CHECK-NEXT:    ret ppc_fp128 0xM80000000000000000000000000000005
126   %x = call ppc_fp128 @llvm.copysign.ppcf128(ppc_fp128 0xM80000000000000000000000000000005, ppc_fp128 0xM80000000000000000000000000000006)
127   ret ppc_fp128 %x