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