diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2023-02-24 10:08:46 -0400 |
---|---|---|
committer | Matt Arsenault <arsenm2@gmail.com> | 2023-03-16 23:14:40 -0400 |
commit | b39deda3e1b3617650964de8a134ca828c1a2451 (patch) | |
tree | 7f60c5d2bfd4f6ad39e7886ecc2ea9e612adb6c7 /llvm/unittests/Analysis/ValueTrackingTest.cpp | |
parent | 931d4098a2ebd7f1046e820164b5b6c85650d4d9 (diff) | |
download | llvm-b39deda3e1b3617650964de8a134ca828c1a2451.zip llvm-b39deda3e1b3617650964de8a134ca828c1a2451.tar.gz llvm-b39deda3e1b3617650964de8a134ca828c1a2451.tar.bz2 |
ValueTracking: Handle nofpclass in computeKnownFPClass
Diffstat (limited to 'llvm/unittests/Analysis/ValueTrackingTest.cpp')
-rw-r--r-- | llvm/unittests/Analysis/ValueTrackingTest.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/llvm/unittests/Analysis/ValueTrackingTest.cpp b/llvm/unittests/Analysis/ValueTrackingTest.cpp index 0211627..4e6b1ef 100644 --- a/llvm/unittests/Analysis/ValueTrackingTest.cpp +++ b/llvm/unittests/Analysis/ValueTrackingTest.cpp @@ -1351,6 +1351,83 @@ TEST_F(ComputeKnownFPClassTest, SelectNNaNNInf) { expectKnownFPClass(~(fcNan | fcInf), std::nullopt); } +TEST_F(ComputeKnownFPClassTest, SelectNoFPClassArgUnionAll) { + parseAssembly( + "define float @test(i1 %cond, float nofpclass(snan ninf nsub pzero pnorm) %arg0, float nofpclass(qnan nnorm nzero psub pinf) %arg1) {\n" + " %A = select i1 %cond, float %arg0, float %arg1" + " ret float %A\n" + "}\n"); + expectKnownFPClass(fcAllFlags, std::nullopt); +} + +TEST_F(ComputeKnownFPClassTest, SelectNoFPClassArgNoNan) { + parseAssembly( + "define float @test(i1 %cond, float nofpclass(nan) %arg0, float nofpclass(nan) %arg1) {\n" + " %A = select i1 %cond, float %arg0, float %arg1" + " ret float %A\n" + "}\n"); + expectKnownFPClass(~fcNan, std::nullopt); +} + +TEST_F(ComputeKnownFPClassTest, SelectNoFPClassArgNoPInf) { + parseAssembly( + "define float @test(i1 %cond, float nofpclass(inf) %arg0, float nofpclass(pinf) %arg1) {\n" + " %A = select i1 %cond, float %arg0, float %arg1" + " ret float %A\n" + "}\n"); + expectKnownFPClass(~fcPosInf, std::nullopt); +} + +TEST_F(ComputeKnownFPClassTest, SelectNoFPClassArgNoNInf) { + parseAssembly( + "define float @test(i1 %cond, float nofpclass(ninf) %arg0, float nofpclass(inf) %arg1) {\n" + " %A = select i1 %cond, float %arg0, float %arg1" + " ret float %A\n" + "}\n"); + expectKnownFPClass(~fcNegInf, std::nullopt); +} + +TEST_F(ComputeKnownFPClassTest, SelectNoFPClassCallSiteNoNan) { + parseAssembly( + "declare float @func()\n" + "define float @test() {\n" + " %A = call nofpclass(nan) float @func()\n" + " ret float %A\n" + "}\n"); + expectKnownFPClass(~fcNan, std::nullopt); +} + +TEST_F(ComputeKnownFPClassTest, SelectNoFPClassCallSiteNoZeros) { + parseAssembly( + "declare float @func()\n" + "define float @test() {\n" + " %A = call nofpclass(zero) float @func()\n" + " ret float %A\n" + "}\n"); + expectKnownFPClass(~fcZero, std::nullopt); +} + +TEST_F(ComputeKnownFPClassTest, SelectNoFPClassDeclarationNoNan) { + parseAssembly( + "declare nofpclass(nan) float @no_nans()\n" + "define float @test() {\n" + " %A = call float @no_nans()\n" + " ret float %A\n" + "}\n"); + expectKnownFPClass(~fcNan, std::nullopt); +} + +// Check nofpclass + ninf works on a callsite +TEST_F(ComputeKnownFPClassTest, SelectNoFPClassCallSiteNoZerosNInfFlags) { + parseAssembly( + "declare float @func()\n" + "define float @test() {\n" + " %A = call ninf nofpclass(zero) float @func()\n" + " ret float %A\n" + "}\n"); + expectKnownFPClass(~(fcZero | fcInf), std::nullopt); +} + TEST_F(ComputeKnownFPClassTest, FNegNInf) { parseAssembly( "define float @test(float %arg) {\n" |