@@ -824,42 +824,7 @@ TEST_F(ValueTrackingTest, ComputeNumSignBits_Shuffle_Pointers) {
824
824
TEST (ValueTracking, propagatesPoison) {
825
825
std::string AsmHead =
826
826
" declare i32 @g(i32)\n "
827
- " declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b)\n "
828
- " declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b)\n "
829
- " declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)\n "
830
- " declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)\n "
831
- " declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b)\n "
832
- " declare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b)\n "
833
- " declare float @llvm.sqrt.f32(float)\n "
834
- " declare float @llvm.powi.f32.i32(float, i32)\n "
835
- " declare float @llvm.sin.f32(float)\n "
836
- " declare float @llvm.cos.f32(float)\n "
837
- " declare float @llvm.pow.f32(float, float)\n "
838
- " declare float @llvm.exp.f32(float)\n "
839
- " declare float @llvm.exp2.f32(float)\n "
840
- " declare float @llvm.log.f32(float)\n "
841
- " declare float @llvm.log10.f32(float)\n "
842
- " declare float @llvm.log2.f32(float)\n "
843
- " declare float @llvm.fma.f32(float, float, float)\n "
844
- " declare float @llvm.fabs.f32(float)\n "
845
- " declare float @llvm.minnum.f32(float, float)\n "
846
- " declare float @llvm.maxnum.f32(float, float)\n "
847
- " declare float @llvm.minimum.f32(float, float)\n "
848
- " declare float @llvm.maximum.f32(float, float)\n "
849
- " declare float @llvm.copysign.f32(float, float)\n "
850
- " declare float @llvm.floor.f32(float)\n "
851
- " declare float @llvm.ceil.f32(float)\n "
852
- " declare float @llvm.trunc.f32(float)\n "
853
- " declare float @llvm.rint.f32(float)\n "
854
- " declare float @llvm.nearbyint.f32(float)\n "
855
- " declare float @llvm.round.f32(float)\n "
856
- " declare float @llvm.roundeven.f32(float)\n "
857
- " declare i32 @llvm.lround.f32(float)\n "
858
- " declare i64 @llvm.llround.f32(float)\n "
859
- " declare i32 @llvm.lrint.f32(float)\n "
860
- " declare i64 @llvm.llrint.f32(float)\n "
861
- " declare float @llvm.fmuladd.f32(float, float, float)\n "
862
- " define void @f(i32 %x, i32 %y, float %fx, float %fy, "
827
+ " define void @f(i32 %x, i32 %y, i32 %shamt, float %fx, float %fy, "
863
828
" i1 %cond, ptr %p) {\n " ;
864
829
std::string AsmTail = " ret void\n }" ;
865
830
// (propagates poison?, IR instruction)
@@ -912,6 +877,28 @@ TEST(ValueTracking, propagatesPoison) {
912
877
{true , " call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)" , 0 },
913
878
{true , " call {i32, i1} @llvm.usub.with.overflow.i32(i32 %x, i32 %y)" , 0 },
914
879
{true , " call {i32, i1} @llvm.umul.with.overflow.i32(i32 %x, i32 %y)" , 0 },
880
+ {true , " call i32 @llvm.sadd.sat.i32(i32 %x, i32 %y)" , 0 },
881
+ {true , " call i32 @llvm.ssub.sat.i32(i32 %x, i32 %y)" , 0 },
882
+ {true , " call i32 @llvm.sshl.sat.i32(i32 %x, i32 %y)" , 0 },
883
+ {true , " call i32 @llvm.uadd.sat.i32(i32 %x, i32 %y)" , 0 },
884
+ {true , " call i32 @llvm.usub.sat.i32(i32 %x, i32 %y)" , 0 },
885
+ {true , " call i32 @llvm.ushl.sat.i32(i32 %x, i32 %y)" , 0 },
886
+ {true , " call i32 @llvm.ctpop.i32(i32 %x)" , 0 },
887
+ {true , " call i32 @llvm.ctlz.i32(i32 %x, i1 true)" , 0 },
888
+ {true , " call i32 @llvm.cttz.i32(i32 %x, i1 true)" , 0 },
889
+ {true , " call i32 @llvm.abs.i32(i32 %x, i1 true)" , 0 },
890
+ {true , " call i32 @llvm.smax.i32(i32 %x, i32 %y)" , 0 },
891
+ {true , " call i32 @llvm.smin.i32(i32 %x, i32 %y)" , 0 },
892
+ {true , " call i32 @llvm.umax.i32(i32 %x, i32 %y)" , 0 },
893
+ {true , " call i32 @llvm.umin.i32(i32 %x, i32 %y)" , 0 },
894
+ {true , " call i32 @llvm.bitreverse.i32(i32 %x)" , 0 },
895
+ {true , " call i32 @llvm.bswap.i32(i32 %x)" , 0 },
896
+ {false , " call i32 @llvm.fshl.i32(i32 %x, i32 %y, i32 %shamt)" , 0 },
897
+ {false , " call i32 @llvm.fshl.i32(i32 %x, i32 %y, i32 %shamt)" , 1 },
898
+ {false , " call i32 @llvm.fshl.i32(i32 %x, i32 %y, i32 %shamt)" , 2 },
899
+ {false , " call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 %shamt)" , 0 },
900
+ {false , " call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 %shamt)" , 1 },
901
+ {false , " call i32 @llvm.fshr.i32(i32 %x, i32 %y, i32 %shamt)" , 2 },
915
902
{false , " call float @llvm.sqrt.f32(float %fx)" , 0 },
916
903
{false , " call float @llvm.powi.f32.i32(float %fx, i32 %x)" , 0 },
917
904
{false , " call float @llvm.sin.f32(float %fx)" , 0 },
0 commit comments