@@ -729,64 +729,64 @@ TEST(ValueTracking, canCreatePoisonOrUndef) {
729
729
" <4 x i32> %vx, <4 x i32> %vx2, <vscale x 4 x i32> %svx, i8* %p) {\n " ;
730
730
std::string AsmTail = " ret void\n }" ;
731
731
// (can create poison?, can create undef?, IR instruction)
732
- SmallVector<std::tuple< bool , bool , std::string>, 32 > Data = {
733
- {false , false , " add i32 %x, %y" },
734
- {true , false , " add nsw nuw i32 %x, %y" },
735
- {true , false , " shl i32 %x, %y" },
736
- {true , false , " shl <4 x i32> %vx, %vx2" },
737
- {true , false , " shl nsw i32 %x, %y" },
738
- {true , false , " shl nsw <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 3>" },
739
- {false , false , " shl i32 %x, 31" },
740
- {true , false , " shl i32 %x, 32" },
741
- {false , false , " shl <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 3>" },
742
- {true , false , " shl <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 32>" },
743
- {true , false , " ashr i32 %x, %y" },
744
- {true , false , " ashr exact i32 %x, %y" },
745
- {false , false , " ashr i32 %x, 31" },
746
- {true , false , " ashr exact i32 %x, 31" },
747
- {false , false , " ashr <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 3>" },
748
- {true , false , " ashr <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 32>" },
749
- {true , false , " ashr exact <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 3>" },
750
- {true , false , " lshr i32 %x, %y" },
751
- {true , false , " lshr exact i32 %x, 31" },
752
- {false , false , " udiv i32 %x, %y" },
753
- {true , false , " udiv exact i32 %x, %y" },
754
- {false , false , " getelementptr i8, i8* %p, i32 %x" },
755
- {true , false , " getelementptr inbounds i8, i8* %p, i32 %x" },
756
- {true , false , " fneg nnan float %fx" },
757
- {false , false , " fneg float %fx" },
758
- {false , false , " fadd float %fx, %fy" },
759
- {true , false , " fadd nnan float %fx, %fy" },
760
- {false , false , " urem i32 %x, %y" },
761
- {true , false , " fptoui float %fx to i32" },
762
- {true , false , " fptosi float %fx to i32" },
763
- {false , false , " bitcast float %fx to i32" },
764
- {false , false , " select i1 %cond, i32 %x, i32 %y" },
765
- {true , false , " select nnan i1 %cond, float %fx, float %fy" },
766
- {true , false , " extractelement <4 x i32> %vx, i32 %x" },
767
- {false , false , " extractelement <4 x i32> %vx, i32 3" },
768
- {true , false , " extractelement <vscale x 4 x i32> %svx, i32 4" },
769
- {true , false , " insertelement <4 x i32> %vx, i32 %x, i32 %y" },
770
- {false , false , " insertelement <4 x i32> %vx, i32 %x, i32 3" },
771
- {true , false , " insertelement <vscale x 4 x i32> %svx, i32 %x, i32 4" },
772
- {false , false , " freeze i32 %x" },
773
- {false , false ,
732
+ SmallVector<std::pair<std::pair< bool , bool > , std::string>, 32 > Data = {
733
+ {{ false , false } , " add i32 %x, %y" },
734
+ {{ true , false } , " add nsw nuw i32 %x, %y" },
735
+ {{ true , false } , " shl i32 %x, %y" },
736
+ {{ true , false } , " shl <4 x i32> %vx, %vx2" },
737
+ {{ true , false } , " shl nsw i32 %x, %y" },
738
+ {{ true , false } , " shl nsw <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 3>" },
739
+ {{ false , false } , " shl i32 %x, 31" },
740
+ {{ true , false } , " shl i32 %x, 32" },
741
+ {{ false , false } , " shl <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 3>" },
742
+ {{ true , false } , " shl <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 32>" },
743
+ {{ true , false } , " ashr i32 %x, %y" },
744
+ {{ true , false } , " ashr exact i32 %x, %y" },
745
+ {{ false , false } , " ashr i32 %x, 31" },
746
+ {{ true , false } , " ashr exact i32 %x, 31" },
747
+ {{ false , false } , " ashr <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 3>" },
748
+ {{ true , false } , " ashr <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 32>" },
749
+ {{ true , false } , " ashr exact <4 x i32> %vx, <i32 0, i32 1, i32 2, i32 3>" },
750
+ {{ true , false } , " lshr i32 %x, %y" },
751
+ {{ true , false } , " lshr exact i32 %x, 31" },
752
+ {{ false , false } , " udiv i32 %x, %y" },
753
+ {{ true , false } , " udiv exact i32 %x, %y" },
754
+ {{ false , false } , " getelementptr i8, i8* %p, i32 %x" },
755
+ {{ true , false } , " getelementptr inbounds i8, i8* %p, i32 %x" },
756
+ {{ true , false } , " fneg nnan float %fx" },
757
+ {{ false , false } , " fneg float %fx" },
758
+ {{ false , false } , " fadd float %fx, %fy" },
759
+ {{ true , false } , " fadd nnan float %fx, %fy" },
760
+ {{ false , false } , " urem i32 %x, %y" },
761
+ {{ true , false } , " fptoui float %fx to i32" },
762
+ {{ true , false } , " fptosi float %fx to i32" },
763
+ {{ false , false } , " bitcast float %fx to i32" },
764
+ {{ false , false } , " select i1 %cond, i32 %x, i32 %y" },
765
+ {{ true , false } , " select nnan i1 %cond, float %fx, float %fy" },
766
+ {{ true , false } , " extractelement <4 x i32> %vx, i32 %x" },
767
+ {{ false , false } , " extractelement <4 x i32> %vx, i32 3" },
768
+ {{ true , false } , " extractelement <vscale x 4 x i32> %svx, i32 4" },
769
+ {{ true , false } , " insertelement <4 x i32> %vx, i32 %x, i32 %y" },
770
+ {{ false , false } , " insertelement <4 x i32> %vx, i32 %x, i32 3" },
771
+ {{ true , false } , " insertelement <vscale x 4 x i32> %svx, i32 %x, i32 4" },
772
+ {{ false , false } , " freeze i32 %x" },
773
+ {{ false , false } ,
774
774
" shufflevector <4 x i32> %vx, <4 x i32> %vx2, "
775
775
" <4 x i32> <i32 0, i32 1, i32 2, i32 3>" },
776
- {false , true ,
776
+ {{ false , true } ,
777
777
" shufflevector <4 x i32> %vx, <4 x i32> %vx2, "
778
778
" <4 x i32> <i32 0, i32 1, i32 2, i32 undef>" },
779
- {false , true ,
779
+ {{ false , true } ,
780
780
" shufflevector <vscale x 4 x i32> %svx, "
781
781
" <vscale x 4 x i32> %svx, <vscale x 4 x i32> undef" },
782
- {true , false , " call i32 @g(i32 %x)" },
783
- {false , false , " call noundef i32 @g(i32 %x)" },
784
- {true , false , " fcmp nnan oeq float %fx, %fy" },
785
- {false , false , " fcmp oeq float %fx, %fy" }};
782
+ {{ true , false } , " call i32 @g(i32 %x)" },
783
+ {{ false , false } , " call noundef i32 @g(i32 %x)" },
784
+ {{ true , false } , " fcmp nnan oeq float %fx, %fy" },
785
+ {{ false , false } , " fcmp oeq float %fx, %fy" }};
786
786
787
787
std::string AssemblyStr = AsmHead;
788
788
for (auto &Itm : Data)
789
- AssemblyStr += std::get< 2 >( Itm) + " \n " ;
789
+ AssemblyStr += Itm. second + " \n " ;
790
790
AssemblyStr += AsmTail;
791
791
792
792
LLVMContext Context;
@@ -803,8 +803,8 @@ TEST(ValueTracking, canCreatePoisonOrUndef) {
803
803
for (auto &I : BB) {
804
804
if (isa<ReturnInst>(&I))
805
805
break ;
806
- bool Poison = std::get< 0 >( Data[Index]) ;
807
- bool Undef = std::get< 1 >( Data[Index]) ;
806
+ bool Poison = Data[Index]. first . first ;
807
+ bool Undef = Data[Index]. first . second ;
808
808
EXPECT_EQ (canCreatePoison (cast<Operator>(&I)), Poison)
809
809
<< " Incorrect answer of canCreatePoison at instruction " << Index
810
810
<< " = " << I;
0 commit comments