@@ -824,42 +824,7 @@ TEST_F(ValueTrackingTest, ComputeNumSignBits_Shuffle_Pointers) {
824824TEST (ValueTracking, propagatesPoison) {
825825 std::string AsmHead =
826826 " 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, "
863828 " i1 %cond, ptr %p) {\n " ;
864829 std::string AsmTail = " ret void\n }" ;
865830 // (propagates poison?, IR instruction)
@@ -912,6 +877,28 @@ TEST(ValueTracking, propagatesPoison) {
912877 {true , " call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)" , 0 },
913878 {true , " call {i32, i1} @llvm.usub.with.overflow.i32(i32 %x, i32 %y)" , 0 },
914879 {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 },
915902 {false , " call float @llvm.sqrt.f32(float %fx)" , 0 },
916903 {false , " call float @llvm.powi.f32.i32(float %fx, i32 %x)" , 0 },
917904 {false , " call float @llvm.sin.f32(float %fx)" , 0 },
0 commit comments