@@ -622,6 +622,7 @@ define void @foo() {
622
622
%fvector = extractelement <2 x double> <double 0.0, double 1.0>, i32 0
623
623
%string = extractvalue [6 x i8] [i8 72, i8 69, i8 76, i8 76, i8 79, i8 0], 0
624
624
%stringNoNull = extractvalue [5 x i8] [i8 72, i8 69, i8 76, i8 76, i8 79], 0
625
+ %splat = extractelement <4 x i8> <i8 1, i8 1, i8 1, i8 1>, i32 0
625
626
ret void
626
627
}
627
628
)IR" );
@@ -637,6 +638,7 @@ define void @foo() {
637
638
auto *I3 = &*It++;
638
639
auto *I4 = &*It++;
639
640
auto *I5 = &*It++;
641
+ auto *I6 = &*It++;
640
642
auto *Array = cast<sandboxir::ConstantDataArray>(I0->getOperand (0 ));
641
643
EXPECT_TRUE (isa<sandboxir::ConstantDataSequential>(Array));
642
644
auto *Vector = cast<sandboxir::ConstantDataVector>(I1->getOperand (0 ));
@@ -649,6 +651,8 @@ define void @foo() {
649
651
EXPECT_TRUE (isa<sandboxir::ConstantDataArray>(String));
650
652
auto *StringNoNull = cast<sandboxir::ConstantDataArray>(I5->getOperand (0 ));
651
653
EXPECT_TRUE (isa<sandboxir::ConstantDataArray>(StringNoNull));
654
+ auto *Splat = cast<sandboxir::ConstantDataVector>(I6->getOperand (0 ));
655
+ EXPECT_TRUE (isa<sandboxir::ConstantDataVector>(Splat));
652
656
653
657
auto *Zero8 = sandboxir::ConstantInt::get (sandboxir::Type::getInt8Ty (Ctx), 0 );
654
658
auto *One8 = sandboxir::ConstantInt::get (sandboxir::Type::getInt8Ty (Ctx), 1 );
@@ -750,9 +754,74 @@ define void @foo() {
750
754
llvm::Type::getDoubleTy (C), Elts64))));
751
755
// Check getString().
752
756
EXPECT_EQ (sandboxir::ConstantDataArray::getString (Ctx, " HELLO" ), String);
757
+
753
758
EXPECT_EQ (sandboxir::ConstantDataArray::getString (Ctx, " HELLO" ,
754
759
/* AddNull=*/ false ),
755
760
StringNoNull);
761
+ EXPECT_EQ (
762
+ sandboxir::ConstantDataArray::getString (Ctx, " HELLO" , /* AddNull=*/ false ),
763
+ StringNoNull);
764
+
765
+ {
766
+ // Check ConstantDataArray member functions
767
+ // ----------------------------------------
768
+ // Check get().
769
+ SmallVector<uint8_t > Elts8 ({0u , 1u });
770
+ SmallVector<uint16_t > Elts16 ({0u , 1u });
771
+ SmallVector<uint32_t > Elts32 ({0u , 1u });
772
+ SmallVector<uint64_t > Elts64 ({0u , 1u });
773
+ SmallVector<float > EltsF32 ({0.0 , 1.0 });
774
+ SmallVector<double > EltsF64 ({0.0 , 1.0 });
775
+ auto *CDV8 = sandboxir::ConstantDataVector::get (Ctx, Elts8);
776
+ EXPECT_EQ (CDV8, cast<sandboxir::ConstantDataVector>(
777
+ Ctx.getValue (llvm::ConstantDataVector::get (C, Elts8))));
778
+ auto *CDV16 = sandboxir::ConstantDataVector::get (Ctx, Elts16);
779
+ EXPECT_EQ (CDV16, cast<sandboxir::ConstantDataVector>(Ctx.getValue (
780
+ llvm::ConstantDataVector::get (C, Elts16))));
781
+ auto *CDV32 = sandboxir::ConstantDataVector::get (Ctx, Elts32);
782
+ EXPECT_EQ (CDV32, cast<sandboxir::ConstantDataVector>(Ctx.getValue (
783
+ llvm::ConstantDataVector::get (C, Elts32))));
784
+ auto *CDVF32 = sandboxir::ConstantDataVector::get (Ctx, EltsF32);
785
+ EXPECT_EQ (CDVF32, cast<sandboxir::ConstantDataVector>(Ctx.getValue (
786
+ llvm::ConstantDataVector::get (C, EltsF32))));
787
+ auto *CDVF64 = sandboxir::ConstantDataVector::get (Ctx, EltsF64);
788
+ EXPECT_EQ (CDVF64, cast<sandboxir::ConstantDataVector>(Ctx.getValue (
789
+ llvm::ConstantDataVector::get (C, EltsF64))));
790
+ // Check getRaw().
791
+ auto *CDVRaw = sandboxir::ConstantDataVector::getRaw (
792
+ StringRef (" HELLO" ), 5 , sandboxir::Type::getInt8Ty (Ctx));
793
+ EXPECT_EQ (CDVRaw,
794
+ cast<sandboxir::ConstantDataVector>(
795
+ Ctx.getValue (llvm::ConstantDataVector::getRaw (
796
+ StringRef (" HELLO" ), 5 , llvm::Type::getInt8Ty (C)))));
797
+ // Check getFP().
798
+ auto *CDVFP16 = sandboxir::ConstantDataVector::getFP (F16Ty, Elts16);
799
+ EXPECT_EQ (CDVFP16, cast<sandboxir::ConstantDataVector>(
800
+ Ctx.getValue (llvm::ConstantDataVector::getFP (
801
+ llvm::Type::getHalfTy (C), Elts16))));
802
+ auto *CDVFP32 = sandboxir::ConstantDataVector::getFP (F32Ty, Elts32);
803
+ EXPECT_EQ (CDVFP32, cast<sandboxir::ConstantDataVector>(
804
+ Ctx.getValue (llvm::ConstantDataVector::getFP (
805
+ llvm::Type::getFloatTy (C), Elts32))));
806
+ auto *CDVFP64 = sandboxir::ConstantDataVector::getFP (F64Ty, Elts64);
807
+ EXPECT_EQ (CDVFP64, cast<sandboxir::ConstantDataVector>(
808
+ Ctx.getValue (llvm::ConstantDataVector::getFP (
809
+ llvm::Type::getDoubleTy (C), Elts64))));
810
+ // Check getSplat().
811
+ auto *NewSplat = cast<sandboxir::ConstantDataVector>(
812
+ sandboxir::ConstantDataVector::getSplat (4 , One8));
813
+ EXPECT_EQ (NewSplat, Splat);
814
+ // Check isSplat().
815
+ EXPECT_TRUE (NewSplat->isSplat ());
816
+ EXPECT_FALSE (Vector->isSplat ());
817
+ // Check getSplatValue().
818
+ EXPECT_EQ (NewSplat->getSplatValue (), One8);
819
+ // Check getType().
820
+ EXPECT_TRUE (isa<sandboxir::FixedVectorType>(NewSplat->getType ()));
821
+ EXPECT_EQ (
822
+ cast<sandboxir::FixedVectorType>(NewSplat->getType ())->getNumElements (),
823
+ 4u );
824
+ }
756
825
}
757
826
758
827
TEST_F (SandboxIRTest, ConstantPointerNull) {
0 commit comments