155 changes: 155 additions & 0 deletions llvm/test/Analysis/ConstantFolding/AMDGPU/cubeid.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instsimplify -S | FileCheck %s

declare float @llvm.amdgcn.cubeid(float, float, float)

define void @test(float* %p) {
; CHECK-LABEL: @test(
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P:%.*]]
; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]]
; CHECK-NEXT: ret void
;
%p3p4p5 = call float @llvm.amdgcn.cubeid(float +3.0, float +4.0, float +5.0)
store volatile float %p3p4p5, float* %p
%p3p5p4 = call float @llvm.amdgcn.cubeid(float +3.0, float +5.0, float +4.0)
store volatile float %p3p5p4, float* %p
%p4p3p5 = call float @llvm.amdgcn.cubeid(float +4.0, float +3.0, float +5.0)
store volatile float %p4p3p5, float* %p
%p4p5p3 = call float @llvm.amdgcn.cubeid(float +4.0, float +5.0, float +3.0)
store volatile float %p4p5p3, float* %p
%p5p3p4 = call float @llvm.amdgcn.cubeid(float +5.0, float +3.0, float +4.0)
store volatile float %p5p3p4, float* %p
%p5p4p3 = call float @llvm.amdgcn.cubeid(float +5.0, float +4.0, float +3.0)
store volatile float %p5p4p3, float* %p
%p3p4n5 = call float @llvm.amdgcn.cubeid(float +3.0, float +4.0, float -5.0)
store volatile float %p3p4n5, float* %p
%p3p5n4 = call float @llvm.amdgcn.cubeid(float +3.0, float +5.0, float -4.0)
store volatile float %p3p5n4, float* %p
%p4p3n5 = call float @llvm.amdgcn.cubeid(float +4.0, float +3.0, float -5.0)
store volatile float %p4p3n5, float* %p
%p4p5n3 = call float @llvm.amdgcn.cubeid(float +4.0, float +5.0, float -3.0)
store volatile float %p4p5n3, float* %p
%p5p3n4 = call float @llvm.amdgcn.cubeid(float +5.0, float +3.0, float -4.0)
store volatile float %p5p3n4, float* %p
%p5p4n3 = call float @llvm.amdgcn.cubeid(float +5.0, float +4.0, float -3.0)
store volatile float %p5p4n3, float* %p
%p3n4p5 = call float @llvm.amdgcn.cubeid(float +3.0, float -4.0, float +5.0)
store volatile float %p3n4p5, float* %p
%p3n5p4 = call float @llvm.amdgcn.cubeid(float +3.0, float -5.0, float +4.0)
store volatile float %p3n5p4, float* %p
%p4n3p5 = call float @llvm.amdgcn.cubeid(float +4.0, float -3.0, float +5.0)
store volatile float %p4n3p5, float* %p
%p4n5p3 = call float @llvm.amdgcn.cubeid(float +4.0, float -5.0, float +3.0)
store volatile float %p4n5p3, float* %p
%p5n3p4 = call float @llvm.amdgcn.cubeid(float +5.0, float -3.0, float +4.0)
store volatile float %p5n3p4, float* %p
%p5n4p3 = call float @llvm.amdgcn.cubeid(float +5.0, float -4.0, float +3.0)
store volatile float %p5n4p3, float* %p
%p3n4n5 = call float @llvm.amdgcn.cubeid(float +3.0, float -4.0, float -5.0)
store volatile float %p3n4n5, float* %p
%p3n5n4 = call float @llvm.amdgcn.cubeid(float +3.0, float -5.0, float -4.0)
store volatile float %p3n5n4, float* %p
%p4n3n5 = call float @llvm.amdgcn.cubeid(float +4.0, float -3.0, float -5.0)
store volatile float %p4n3n5, float* %p
%p4n5n3 = call float @llvm.amdgcn.cubeid(float +4.0, float -5.0, float -3.0)
store volatile float %p4n5n3, float* %p
%p5n3n4 = call float @llvm.amdgcn.cubeid(float +5.0, float -3.0, float -4.0)
store volatile float %p5n3n4, float* %p
%p5n4n3 = call float @llvm.amdgcn.cubeid(float +5.0, float -4.0, float -3.0)
store volatile float %p5n4n3, float* %p
%n3p4p5 = call float @llvm.amdgcn.cubeid(float -3.0, float +4.0, float +5.0)
store volatile float %n3p4p5, float* %p
%n3p5p4 = call float @llvm.amdgcn.cubeid(float -3.0, float +5.0, float +4.0)
store volatile float %n3p5p4, float* %p
%n4p3p5 = call float @llvm.amdgcn.cubeid(float -4.0, float +3.0, float +5.0)
store volatile float %n4p3p5, float* %p
%n4p5p3 = call float @llvm.amdgcn.cubeid(float -4.0, float +5.0, float +3.0)
store volatile float %n4p5p3, float* %p
%n5p3p4 = call float @llvm.amdgcn.cubeid(float -5.0, float +3.0, float +4.0)
store volatile float %n5p3p4, float* %p
%n5p4p3 = call float @llvm.amdgcn.cubeid(float -5.0, float +4.0, float +3.0)
store volatile float %n5p4p3, float* %p
%n3p4n5 = call float @llvm.amdgcn.cubeid(float -3.0, float +4.0, float -5.0)
store volatile float %n3p4n5, float* %p
%n3p5n4 = call float @llvm.amdgcn.cubeid(float -3.0, float +5.0, float -4.0)
store volatile float %n3p5n4, float* %p
%n4p3n5 = call float @llvm.amdgcn.cubeid(float -4.0, float +3.0, float -5.0)
store volatile float %n4p3n5, float* %p
%n4p5n3 = call float @llvm.amdgcn.cubeid(float -4.0, float +5.0, float -3.0)
store volatile float %n4p5n3, float* %p
%n5p3n4 = call float @llvm.amdgcn.cubeid(float -5.0, float +3.0, float -4.0)
store volatile float %n5p3n4, float* %p
%n5p4n3 = call float @llvm.amdgcn.cubeid(float -5.0, float +4.0, float -3.0)
store volatile float %n5p4n3, float* %p
%n3n4p5 = call float @llvm.amdgcn.cubeid(float -3.0, float -4.0, float +5.0)
store volatile float %n3n4p5, float* %p
%n3n5p4 = call float @llvm.amdgcn.cubeid(float -3.0, float -5.0, float +4.0)
store volatile float %n3n5p4, float* %p
%n4n3p5 = call float @llvm.amdgcn.cubeid(float -4.0, float -3.0, float +5.0)
store volatile float %n4n3p5, float* %p
%n4n5p3 = call float @llvm.amdgcn.cubeid(float -4.0, float -5.0, float +3.0)
store volatile float %n4n5p3, float* %p
%n5n3p4 = call float @llvm.amdgcn.cubeid(float -5.0, float -3.0, float +4.0)
store volatile float %n5n3p4, float* %p
%n5n4p3 = call float @llvm.amdgcn.cubeid(float -5.0, float -4.0, float +3.0)
store volatile float %n5n4p3, float* %p
%n3n4n5 = call float @llvm.amdgcn.cubeid(float -3.0, float -4.0, float -5.0)
store volatile float %n3n4n5, float* %p
%n3n5n4 = call float @llvm.amdgcn.cubeid(float -3.0, float -5.0, float -4.0)
store volatile float %n3n5n4, float* %p
%n4n3n5 = call float @llvm.amdgcn.cubeid(float -4.0, float -3.0, float -5.0)
store volatile float %n4n3n5, float* %p
%n4n5n3 = call float @llvm.amdgcn.cubeid(float -4.0, float -5.0, float -3.0)
store volatile float %n4n5n3, float* %p
%n5n3n4 = call float @llvm.amdgcn.cubeid(float -5.0, float -3.0, float -4.0)
store volatile float %n5n3n4, float* %p
%n5n4n3 = call float @llvm.amdgcn.cubeid(float -5.0, float -4.0, float -3.0)
store volatile float %n5n4n3, float* %p
ret void
}
155 changes: 155 additions & 0 deletions llvm/test/Analysis/ConstantFolding/AMDGPU/cubema.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instsimplify -S | FileCheck %s

declare float @llvm.amdgcn.cubema(float, float, float)

define void @test(float* %p) {
; CHECK-LABEL: @test(
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P:%.*]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]]
; CHECK-NEXT: ret void
;
%p3p4p5 = call float @llvm.amdgcn.cubema(float +3.0, float +4.0, float +5.0)
store volatile float %p3p4p5, float* %p
%p3p5p4 = call float @llvm.amdgcn.cubema(float +3.0, float +5.0, float +4.0)
store volatile float %p3p5p4, float* %p
%p4p3p5 = call float @llvm.amdgcn.cubema(float +4.0, float +3.0, float +5.0)
store volatile float %p4p3p5, float* %p
%p4p5p3 = call float @llvm.amdgcn.cubema(float +4.0, float +5.0, float +3.0)
store volatile float %p4p5p3, float* %p
%p5p3p4 = call float @llvm.amdgcn.cubema(float +5.0, float +3.0, float +4.0)
store volatile float %p5p3p4, float* %p
%p5p4p3 = call float @llvm.amdgcn.cubema(float +5.0, float +4.0, float +3.0)
store volatile float %p5p4p3, float* %p
%p3p4n5 = call float @llvm.amdgcn.cubema(float +3.0, float +4.0, float -5.0)
store volatile float %p3p4n5, float* %p
%p3p5n4 = call float @llvm.amdgcn.cubema(float +3.0, float +5.0, float -4.0)
store volatile float %p3p5n4, float* %p
%p4p3n5 = call float @llvm.amdgcn.cubema(float +4.0, float +3.0, float -5.0)
store volatile float %p4p3n5, float* %p
%p4p5n3 = call float @llvm.amdgcn.cubema(float +4.0, float +5.0, float -3.0)
store volatile float %p4p5n3, float* %p
%p5p3n4 = call float @llvm.amdgcn.cubema(float +5.0, float +3.0, float -4.0)
store volatile float %p5p3n4, float* %p
%p5p4n3 = call float @llvm.amdgcn.cubema(float +5.0, float +4.0, float -3.0)
store volatile float %p5p4n3, float* %p
%p3n4p5 = call float @llvm.amdgcn.cubema(float +3.0, float -4.0, float +5.0)
store volatile float %p3n4p5, float* %p
%p3n5p4 = call float @llvm.amdgcn.cubema(float +3.0, float -5.0, float +4.0)
store volatile float %p3n5p4, float* %p
%p4n3p5 = call float @llvm.amdgcn.cubema(float +4.0, float -3.0, float +5.0)
store volatile float %p4n3p5, float* %p
%p4n5p3 = call float @llvm.amdgcn.cubema(float +4.0, float -5.0, float +3.0)
store volatile float %p4n5p3, float* %p
%p5n3p4 = call float @llvm.amdgcn.cubema(float +5.0, float -3.0, float +4.0)
store volatile float %p5n3p4, float* %p
%p5n4p3 = call float @llvm.amdgcn.cubema(float +5.0, float -4.0, float +3.0)
store volatile float %p5n4p3, float* %p
%p3n4n5 = call float @llvm.amdgcn.cubema(float +3.0, float -4.0, float -5.0)
store volatile float %p3n4n5, float* %p
%p3n5n4 = call float @llvm.amdgcn.cubema(float +3.0, float -5.0, float -4.0)
store volatile float %p3n5n4, float* %p
%p4n3n5 = call float @llvm.amdgcn.cubema(float +4.0, float -3.0, float -5.0)
store volatile float %p4n3n5, float* %p
%p4n5n3 = call float @llvm.amdgcn.cubema(float +4.0, float -5.0, float -3.0)
store volatile float %p4n5n3, float* %p
%p5n3n4 = call float @llvm.amdgcn.cubema(float +5.0, float -3.0, float -4.0)
store volatile float %p5n3n4, float* %p
%p5n4n3 = call float @llvm.amdgcn.cubema(float +5.0, float -4.0, float -3.0)
store volatile float %p5n4n3, float* %p
%n3p4p5 = call float @llvm.amdgcn.cubema(float -3.0, float +4.0, float +5.0)
store volatile float %n3p4p5, float* %p
%n3p5p4 = call float @llvm.amdgcn.cubema(float -3.0, float +5.0, float +4.0)
store volatile float %n3p5p4, float* %p
%n4p3p5 = call float @llvm.amdgcn.cubema(float -4.0, float +3.0, float +5.0)
store volatile float %n4p3p5, float* %p
%n4p5p3 = call float @llvm.amdgcn.cubema(float -4.0, float +5.0, float +3.0)
store volatile float %n4p5p3, float* %p
%n5p3p4 = call float @llvm.amdgcn.cubema(float -5.0, float +3.0, float +4.0)
store volatile float %n5p3p4, float* %p
%n5p4p3 = call float @llvm.amdgcn.cubema(float -5.0, float +4.0, float +3.0)
store volatile float %n5p4p3, float* %p
%n3p4n5 = call float @llvm.amdgcn.cubema(float -3.0, float +4.0, float -5.0)
store volatile float %n3p4n5, float* %p
%n3p5n4 = call float @llvm.amdgcn.cubema(float -3.0, float +5.0, float -4.0)
store volatile float %n3p5n4, float* %p
%n4p3n5 = call float @llvm.amdgcn.cubema(float -4.0, float +3.0, float -5.0)
store volatile float %n4p3n5, float* %p
%n4p5n3 = call float @llvm.amdgcn.cubema(float -4.0, float +5.0, float -3.0)
store volatile float %n4p5n3, float* %p
%n5p3n4 = call float @llvm.amdgcn.cubema(float -5.0, float +3.0, float -4.0)
store volatile float %n5p3n4, float* %p
%n5p4n3 = call float @llvm.amdgcn.cubema(float -5.0, float +4.0, float -3.0)
store volatile float %n5p4n3, float* %p
%n3n4p5 = call float @llvm.amdgcn.cubema(float -3.0, float -4.0, float +5.0)
store volatile float %n3n4p5, float* %p
%n3n5p4 = call float @llvm.amdgcn.cubema(float -3.0, float -5.0, float +4.0)
store volatile float %n3n5p4, float* %p
%n4n3p5 = call float @llvm.amdgcn.cubema(float -4.0, float -3.0, float +5.0)
store volatile float %n4n3p5, float* %p
%n4n5p3 = call float @llvm.amdgcn.cubema(float -4.0, float -5.0, float +3.0)
store volatile float %n4n5p3, float* %p
%n5n3p4 = call float @llvm.amdgcn.cubema(float -5.0, float -3.0, float +4.0)
store volatile float %n5n3p4, float* %p
%n5n4p3 = call float @llvm.amdgcn.cubema(float -5.0, float -4.0, float +3.0)
store volatile float %n5n4p3, float* %p
%n3n4n5 = call float @llvm.amdgcn.cubema(float -3.0, float -4.0, float -5.0)
store volatile float %n3n4n5, float* %p
%n3n5n4 = call float @llvm.amdgcn.cubema(float -3.0, float -5.0, float -4.0)
store volatile float %n3n5n4, float* %p
%n4n3n5 = call float @llvm.amdgcn.cubema(float -4.0, float -3.0, float -5.0)
store volatile float %n4n3n5, float* %p
%n4n5n3 = call float @llvm.amdgcn.cubema(float -4.0, float -5.0, float -3.0)
store volatile float %n4n5n3, float* %p
%n5n3n4 = call float @llvm.amdgcn.cubema(float -5.0, float -3.0, float -4.0)
store volatile float %n5n3n4, float* %p
%n5n4n3 = call float @llvm.amdgcn.cubema(float -5.0, float -4.0, float -3.0)
store volatile float %n5n4n3, float* %p
ret void
}
155 changes: 155 additions & 0 deletions llvm/test/Analysis/ConstantFolding/AMDGPU/cubesc.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instsimplify -S | FileCheck %s

declare float @llvm.amdgcn.cubesc(float, float, float)

define void @test(float* %p) {
; CHECK-LABEL: @test(
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P:%.*]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: ret void
;
%p3p4p5 = call float @llvm.amdgcn.cubesc(float +3.0, float +4.0, float +5.0)
store volatile float %p3p4p5, float* %p
%p3p5p4 = call float @llvm.amdgcn.cubesc(float +3.0, float +5.0, float +4.0)
store volatile float %p3p5p4, float* %p
%p4p3p5 = call float @llvm.amdgcn.cubesc(float +4.0, float +3.0, float +5.0)
store volatile float %p4p3p5, float* %p
%p4p5p3 = call float @llvm.amdgcn.cubesc(float +4.0, float +5.0, float +3.0)
store volatile float %p4p5p3, float* %p
%p5p3p4 = call float @llvm.amdgcn.cubesc(float +5.0, float +3.0, float +4.0)
store volatile float %p5p3p4, float* %p
%p5p4p3 = call float @llvm.amdgcn.cubesc(float +5.0, float +4.0, float +3.0)
store volatile float %p5p4p3, float* %p
%p3p4n5 = call float @llvm.amdgcn.cubesc(float +3.0, float +4.0, float -5.0)
store volatile float %p3p4n5, float* %p
%p3p5n4 = call float @llvm.amdgcn.cubesc(float +3.0, float +5.0, float -4.0)
store volatile float %p3p5n4, float* %p
%p4p3n5 = call float @llvm.amdgcn.cubesc(float +4.0, float +3.0, float -5.0)
store volatile float %p4p3n5, float* %p
%p4p5n3 = call float @llvm.amdgcn.cubesc(float +4.0, float +5.0, float -3.0)
store volatile float %p4p5n3, float* %p
%p5p3n4 = call float @llvm.amdgcn.cubesc(float +5.0, float +3.0, float -4.0)
store volatile float %p5p3n4, float* %p
%p5p4n3 = call float @llvm.amdgcn.cubesc(float +5.0, float +4.0, float -3.0)
store volatile float %p5p4n3, float* %p
%p3n4p5 = call float @llvm.amdgcn.cubesc(float +3.0, float -4.0, float +5.0)
store volatile float %p3n4p5, float* %p
%p3n5p4 = call float @llvm.amdgcn.cubesc(float +3.0, float -5.0, float +4.0)
store volatile float %p3n5p4, float* %p
%p4n3p5 = call float @llvm.amdgcn.cubesc(float +4.0, float -3.0, float +5.0)
store volatile float %p4n3p5, float* %p
%p4n5p3 = call float @llvm.amdgcn.cubesc(float +4.0, float -5.0, float +3.0)
store volatile float %p4n5p3, float* %p
%p5n3p4 = call float @llvm.amdgcn.cubesc(float +5.0, float -3.0, float +4.0)
store volatile float %p5n3p4, float* %p
%p5n4p3 = call float @llvm.amdgcn.cubesc(float +5.0, float -4.0, float +3.0)
store volatile float %p5n4p3, float* %p
%p3n4n5 = call float @llvm.amdgcn.cubesc(float +3.0, float -4.0, float -5.0)
store volatile float %p3n4n5, float* %p
%p3n5n4 = call float @llvm.amdgcn.cubesc(float +3.0, float -5.0, float -4.0)
store volatile float %p3n5n4, float* %p
%p4n3n5 = call float @llvm.amdgcn.cubesc(float +4.0, float -3.0, float -5.0)
store volatile float %p4n3n5, float* %p
%p4n5n3 = call float @llvm.amdgcn.cubesc(float +4.0, float -5.0, float -3.0)
store volatile float %p4n5n3, float* %p
%p5n3n4 = call float @llvm.amdgcn.cubesc(float +5.0, float -3.0, float -4.0)
store volatile float %p5n3n4, float* %p
%p5n4n3 = call float @llvm.amdgcn.cubesc(float +5.0, float -4.0, float -3.0)
store volatile float %p5n4n3, float* %p
%n3p4p5 = call float @llvm.amdgcn.cubesc(float -3.0, float +4.0, float +5.0)
store volatile float %n3p4p5, float* %p
%n3p5p4 = call float @llvm.amdgcn.cubesc(float -3.0, float +5.0, float +4.0)
store volatile float %n3p5p4, float* %p
%n4p3p5 = call float @llvm.amdgcn.cubesc(float -4.0, float +3.0, float +5.0)
store volatile float %n4p3p5, float* %p
%n4p5p3 = call float @llvm.amdgcn.cubesc(float -4.0, float +5.0, float +3.0)
store volatile float %n4p5p3, float* %p
%n5p3p4 = call float @llvm.amdgcn.cubesc(float -5.0, float +3.0, float +4.0)
store volatile float %n5p3p4, float* %p
%n5p4p3 = call float @llvm.amdgcn.cubesc(float -5.0, float +4.0, float +3.0)
store volatile float %n5p4p3, float* %p
%n3p4n5 = call float @llvm.amdgcn.cubesc(float -3.0, float +4.0, float -5.0)
store volatile float %n3p4n5, float* %p
%n3p5n4 = call float @llvm.amdgcn.cubesc(float -3.0, float +5.0, float -4.0)
store volatile float %n3p5n4, float* %p
%n4p3n5 = call float @llvm.amdgcn.cubesc(float -4.0, float +3.0, float -5.0)
store volatile float %n4p3n5, float* %p
%n4p5n3 = call float @llvm.amdgcn.cubesc(float -4.0, float +5.0, float -3.0)
store volatile float %n4p5n3, float* %p
%n5p3n4 = call float @llvm.amdgcn.cubesc(float -5.0, float +3.0, float -4.0)
store volatile float %n5p3n4, float* %p
%n5p4n3 = call float @llvm.amdgcn.cubesc(float -5.0, float +4.0, float -3.0)
store volatile float %n5p4n3, float* %p
%n3n4p5 = call float @llvm.amdgcn.cubesc(float -3.0, float -4.0, float +5.0)
store volatile float %n3n4p5, float* %p
%n3n5p4 = call float @llvm.amdgcn.cubesc(float -3.0, float -5.0, float +4.0)
store volatile float %n3n5p4, float* %p
%n4n3p5 = call float @llvm.amdgcn.cubesc(float -4.0, float -3.0, float +5.0)
store volatile float %n4n3p5, float* %p
%n4n5p3 = call float @llvm.amdgcn.cubesc(float -4.0, float -5.0, float +3.0)
store volatile float %n4n5p3, float* %p
%n5n3p4 = call float @llvm.amdgcn.cubesc(float -5.0, float -3.0, float +4.0)
store volatile float %n5n3p4, float* %p
%n5n4p3 = call float @llvm.amdgcn.cubesc(float -5.0, float -4.0, float +3.0)
store volatile float %n5n4p3, float* %p
%n3n4n5 = call float @llvm.amdgcn.cubesc(float -3.0, float -4.0, float -5.0)
store volatile float %n3n4n5, float* %p
%n3n5n4 = call float @llvm.amdgcn.cubesc(float -3.0, float -5.0, float -4.0)
store volatile float %n3n5n4, float* %p
%n4n3n5 = call float @llvm.amdgcn.cubesc(float -4.0, float -3.0, float -5.0)
store volatile float %n4n3n5, float* %p
%n4n5n3 = call float @llvm.amdgcn.cubesc(float -4.0, float -5.0, float -3.0)
store volatile float %n4n5n3, float* %p
%n5n3n4 = call float @llvm.amdgcn.cubesc(float -5.0, float -3.0, float -4.0)
store volatile float %n5n3n4, float* %p
%n5n4n3 = call float @llvm.amdgcn.cubesc(float -5.0, float -4.0, float -3.0)
store volatile float %n5n4n3, float* %p
ret void
}
155 changes: 155 additions & 0 deletions llvm/test/Analysis/ConstantFolding/AMDGPU/cubetc.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instsimplify -S | FileCheck %s

declare float @llvm.amdgcn.cubetc(float, float, float)

define void @test(float* %p) {
; CHECK-LABEL: @test(
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P:%.*]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]]
; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]]
; CHECK-NEXT: ret void
;
%p3p4p5 = call float @llvm.amdgcn.cubetc(float +3.0, float +4.0, float +5.0)
store volatile float %p3p4p5, float* %p
%p3p5p4 = call float @llvm.amdgcn.cubetc(float +3.0, float +5.0, float +4.0)
store volatile float %p3p5p4, float* %p
%p4p3p5 = call float @llvm.amdgcn.cubetc(float +4.0, float +3.0, float +5.0)
store volatile float %p4p3p5, float* %p
%p4p5p3 = call float @llvm.amdgcn.cubetc(float +4.0, float +5.0, float +3.0)
store volatile float %p4p5p3, float* %p
%p5p3p4 = call float @llvm.amdgcn.cubetc(float +5.0, float +3.0, float +4.0)
store volatile float %p5p3p4, float* %p
%p5p4p3 = call float @llvm.amdgcn.cubetc(float +5.0, float +4.0, float +3.0)
store volatile float %p5p4p3, float* %p
%p3p4n5 = call float @llvm.amdgcn.cubetc(float +3.0, float +4.0, float -5.0)
store volatile float %p3p4n5, float* %p
%p3p5n4 = call float @llvm.amdgcn.cubetc(float +3.0, float +5.0, float -4.0)
store volatile float %p3p5n4, float* %p
%p4p3n5 = call float @llvm.amdgcn.cubetc(float +4.0, float +3.0, float -5.0)
store volatile float %p4p3n5, float* %p
%p4p5n3 = call float @llvm.amdgcn.cubetc(float +4.0, float +5.0, float -3.0)
store volatile float %p4p5n3, float* %p
%p5p3n4 = call float @llvm.amdgcn.cubetc(float +5.0, float +3.0, float -4.0)
store volatile float %p5p3n4, float* %p
%p5p4n3 = call float @llvm.amdgcn.cubetc(float +5.0, float +4.0, float -3.0)
store volatile float %p5p4n3, float* %p
%p3n4p5 = call float @llvm.amdgcn.cubetc(float +3.0, float -4.0, float +5.0)
store volatile float %p3n4p5, float* %p
%p3n5p4 = call float @llvm.amdgcn.cubetc(float +3.0, float -5.0, float +4.0)
store volatile float %p3n5p4, float* %p
%p4n3p5 = call float @llvm.amdgcn.cubetc(float +4.0, float -3.0, float +5.0)
store volatile float %p4n3p5, float* %p
%p4n5p3 = call float @llvm.amdgcn.cubetc(float +4.0, float -5.0, float +3.0)
store volatile float %p4n5p3, float* %p
%p5n3p4 = call float @llvm.amdgcn.cubetc(float +5.0, float -3.0, float +4.0)
store volatile float %p5n3p4, float* %p
%p5n4p3 = call float @llvm.amdgcn.cubetc(float +5.0, float -4.0, float +3.0)
store volatile float %p5n4p3, float* %p
%p3n4n5 = call float @llvm.amdgcn.cubetc(float +3.0, float -4.0, float -5.0)
store volatile float %p3n4n5, float* %p
%p3n5n4 = call float @llvm.amdgcn.cubetc(float +3.0, float -5.0, float -4.0)
store volatile float %p3n5n4, float* %p
%p4n3n5 = call float @llvm.amdgcn.cubetc(float +4.0, float -3.0, float -5.0)
store volatile float %p4n3n5, float* %p
%p4n5n3 = call float @llvm.amdgcn.cubetc(float +4.0, float -5.0, float -3.0)
store volatile float %p4n5n3, float* %p
%p5n3n4 = call float @llvm.amdgcn.cubetc(float +5.0, float -3.0, float -4.0)
store volatile float %p5n3n4, float* %p
%p5n4n3 = call float @llvm.amdgcn.cubetc(float +5.0, float -4.0, float -3.0)
store volatile float %p5n4n3, float* %p
%n3p4p5 = call float @llvm.amdgcn.cubetc(float -3.0, float +4.0, float +5.0)
store volatile float %n3p4p5, float* %p
%n3p5p4 = call float @llvm.amdgcn.cubetc(float -3.0, float +5.0, float +4.0)
store volatile float %n3p5p4, float* %p
%n4p3p5 = call float @llvm.amdgcn.cubetc(float -4.0, float +3.0, float +5.0)
store volatile float %n4p3p5, float* %p
%n4p5p3 = call float @llvm.amdgcn.cubetc(float -4.0, float +5.0, float +3.0)
store volatile float %n4p5p3, float* %p
%n5p3p4 = call float @llvm.amdgcn.cubetc(float -5.0, float +3.0, float +4.0)
store volatile float %n5p3p4, float* %p
%n5p4p3 = call float @llvm.amdgcn.cubetc(float -5.0, float +4.0, float +3.0)
store volatile float %n5p4p3, float* %p
%n3p4n5 = call float @llvm.amdgcn.cubetc(float -3.0, float +4.0, float -5.0)
store volatile float %n3p4n5, float* %p
%n3p5n4 = call float @llvm.amdgcn.cubetc(float -3.0, float +5.0, float -4.0)
store volatile float %n3p5n4, float* %p
%n4p3n5 = call float @llvm.amdgcn.cubetc(float -4.0, float +3.0, float -5.0)
store volatile float %n4p3n5, float* %p
%n4p5n3 = call float @llvm.amdgcn.cubetc(float -4.0, float +5.0, float -3.0)
store volatile float %n4p5n3, float* %p
%n5p3n4 = call float @llvm.amdgcn.cubetc(float -5.0, float +3.0, float -4.0)
store volatile float %n5p3n4, float* %p
%n5p4n3 = call float @llvm.amdgcn.cubetc(float -5.0, float +4.0, float -3.0)
store volatile float %n5p4n3, float* %p
%n3n4p5 = call float @llvm.amdgcn.cubetc(float -3.0, float -4.0, float +5.0)
store volatile float %n3n4p5, float* %p
%n3n5p4 = call float @llvm.amdgcn.cubetc(float -3.0, float -5.0, float +4.0)
store volatile float %n3n5p4, float* %p
%n4n3p5 = call float @llvm.amdgcn.cubetc(float -4.0, float -3.0, float +5.0)
store volatile float %n4n3p5, float* %p
%n4n5p3 = call float @llvm.amdgcn.cubetc(float -4.0, float -5.0, float +3.0)
store volatile float %n4n5p3, float* %p
%n5n3p4 = call float @llvm.amdgcn.cubetc(float -5.0, float -3.0, float +4.0)
store volatile float %n5n3p4, float* %p
%n5n4p3 = call float @llvm.amdgcn.cubetc(float -5.0, float -4.0, float +3.0)
store volatile float %n5n4p3, float* %p
%n3n4n5 = call float @llvm.amdgcn.cubetc(float -3.0, float -4.0, float -5.0)
store volatile float %n3n4n5, float* %p
%n3n5n4 = call float @llvm.amdgcn.cubetc(float -3.0, float -5.0, float -4.0)
store volatile float %n3n5n4, float* %p
%n4n3n5 = call float @llvm.amdgcn.cubetc(float -4.0, float -3.0, float -5.0)
store volatile float %n4n3n5, float* %p
%n4n5n3 = call float @llvm.amdgcn.cubetc(float -4.0, float -5.0, float -3.0)
store volatile float %n4n5n3, float* %p
%n5n3n4 = call float @llvm.amdgcn.cubetc(float -5.0, float -3.0, float -4.0)
store volatile float %n5n3n4, float* %p
%n5n4n3 = call float @llvm.amdgcn.cubetc(float -5.0, float -4.0, float -3.0)
store volatile float %n5n4n3, float* %p
ret void
}
65 changes: 65 additions & 0 deletions llvm/unittests/ADT/APFloatTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2932,6 +2932,71 @@ TEST(APFloatTest, operatorOverloads) {
EXPECT_TRUE(One.bitwiseIsEqual(Two / Two));
}

TEST(APFloatTest, Comparisons) {
enum {MNan, MInf, MBig, MOne, MZer, PZer, POne, PBig, PInf, PNan, NumVals};
APFloat Vals[NumVals] = {
APFloat::getNaN(APFloat::IEEEsingle(), true),
APFloat::getInf(APFloat::IEEEsingle(), true),
APFloat::getLargest(APFloat::IEEEsingle(), true),
APFloat(APFloat::IEEEsingle(), "-0x1p+0"),
APFloat::getZero(APFloat::IEEEsingle(), true),
APFloat::getZero(APFloat::IEEEsingle(), false),
APFloat(APFloat::IEEEsingle(), "0x1p+0"),
APFloat::getLargest(APFloat::IEEEsingle(), false),
APFloat::getInf(APFloat::IEEEsingle(), false),
APFloat::getNaN(APFloat::IEEEsingle(), false),
};
using Relation = void (*)(const APFloat &, const APFloat &);
Relation LT = [](const APFloat &LHS, const APFloat &RHS) {
EXPECT_FALSE(LHS == RHS);
EXPECT_TRUE(LHS != RHS);
EXPECT_TRUE(LHS < RHS);
EXPECT_FALSE(LHS > RHS);
EXPECT_TRUE(LHS <= RHS);
EXPECT_FALSE(LHS >= RHS);
};
Relation EQ = [](const APFloat &LHS, const APFloat &RHS) {
EXPECT_TRUE(LHS == RHS);
EXPECT_FALSE(LHS != RHS);
EXPECT_FALSE(LHS < RHS);
EXPECT_FALSE(LHS > RHS);
EXPECT_TRUE(LHS <= RHS);
EXPECT_TRUE(LHS >= RHS);
};
Relation GT = [](const APFloat &LHS, const APFloat &RHS) {
EXPECT_FALSE(LHS == RHS);
EXPECT_TRUE(LHS != RHS);
EXPECT_FALSE(LHS < RHS);
EXPECT_TRUE(LHS > RHS);
EXPECT_FALSE(LHS <= RHS);
EXPECT_TRUE(LHS >= RHS);
};
Relation UN = [](const APFloat &LHS, const APFloat &RHS) {
EXPECT_FALSE(LHS == RHS);
EXPECT_TRUE(LHS != RHS);
EXPECT_FALSE(LHS < RHS);
EXPECT_FALSE(LHS > RHS);
EXPECT_FALSE(LHS <= RHS);
EXPECT_FALSE(LHS >= RHS);
};
Relation Relations[NumVals][NumVals] = {
// -N -I -B -1 -0 +0 +1 +B +I +N
/* MNan */ {UN, UN, UN, UN, UN, UN, UN, UN, UN, UN},
/* MInf */ {UN, EQ, LT, LT, LT, LT, LT, LT, LT, UN},
/* MBig */ {UN, GT, EQ, LT, LT, LT, LT, LT, LT, UN},
/* MOne */ {UN, GT, GT, EQ, LT, LT, LT, LT, LT, UN},
/* MZer */ {UN, GT, GT, GT, EQ, EQ, LT, LT, LT, UN},
/* PZer */ {UN, GT, GT, GT, EQ, EQ, LT, LT, LT, UN},
/* POne */ {UN, GT, GT, GT, GT, GT, EQ, LT, LT, UN},
/* PBig */ {UN, GT, GT, GT, GT, GT, GT, EQ, LT, UN},
/* PInf */ {UN, GT, GT, GT, GT, GT, GT, GT, EQ, UN},
/* PNan */ {UN, UN, UN, UN, UN, UN, UN, UN, UN, UN},
};
for (unsigned I = 0; I < NumVals; ++I)
for (unsigned J = 0; J < NumVals; ++J)
Relations[I][J](Vals[I], Vals[J]);
}

TEST(APFloatTest, abs) {
APFloat PInf = APFloat::getInf(APFloat::IEEEsingle(), false);
APFloat MInf = APFloat::getInf(APFloat::IEEEsingle(), true);
Expand Down