copysign.ll 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. ; RUN: opt -S -instcombine < %s | FileCheck %s
  2. declare float @llvm.copysign.f32(float, float) #0
  3. declare double @llvm.copysign.f64(double, double) #0
  4. ; CHECK-LABEL: @constant_fold_copysign_f32_01
  5. ; CHECK-NEXT: ret float -1.000000e+00
  6. define float @constant_fold_copysign_f32_01() #0 {
  7. %x = call float @llvm.copysign.f32(float 1.0, float -2.0) #0
  8. ret float %x
  9. }
  10. ; CHECK-LABEL: @constant_fold_copysign_f32_02
  11. ; CHECK-NEXT: ret float 2.000000e+00
  12. define float @constant_fold_copysign_f32_02() #0 {
  13. %x = call float @llvm.copysign.f32(float -2.0, float 1.0) #0
  14. ret float %x
  15. }
  16. ; CHECK-LABEL: @constant_fold_copysign_f32_03
  17. ; CHECK-NEXT: ret float -2.000000e+00
  18. define float @constant_fold_copysign_f32_03() #0 {
  19. %x = call float @llvm.copysign.f32(float -2.0, float -1.0) #0
  20. ret float %x
  21. }
  22. ; CHECK-LABEL: @constant_fold_copysign_f64_01
  23. ; CHECK-NEXT: ret double -1.000000e+00
  24. define double @constant_fold_copysign_f64_01() #0 {
  25. %x = call double @llvm.copysign.f64(double 1.0, double -2.0) #0
  26. ret double %x
  27. }
  28. ; CHECK-LABEL: @constant_fold_copysign_f64_02
  29. ; CHECK-NEXT: ret double 1.000000e+00
  30. define double @constant_fold_copysign_f64_02() #0 {
  31. %x = call double @llvm.copysign.f64(double -1.0, double 2.0) #0
  32. ret double %x
  33. }
  34. ; CHECK-LABEL: @constant_fold_copysign_f64_03
  35. ; CHECK-NEXT: ret double -1.000000e+00
  36. define double @constant_fold_copysign_f64_03() #0 {
  37. %x = call double @llvm.copysign.f64(double -1.0, double -2.0) #0
  38. ret double %x
  39. }
  40. attributes #0 = { nounwind readnone }