@@ -29,7 +29,7 @@ struct LegalityTest : public testing::Test {
2929
3030TEST_F (LegalityTest, Legality) {
3131 parseIR (C, R"IR(
32- define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg, float %farg0, float %farg1) {
32+ define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg, float %farg0, float %farg1, i64 %v0, i64 %v1 ) {
3333 %gep0 = getelementptr float, ptr %ptr, i32 0
3434 %gep1 = getelementptr float, ptr %ptr, i32 1
3535 %gep3 = getelementptr float, ptr %ptr, i32 3
@@ -42,6 +42,8 @@ define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg, float
4242 store i8 %arg, ptr %gep1
4343 %fadd0 = fadd float %farg0, %farg0
4444 %fadd1 = fadd fast float %farg1, %farg1
45+ %trunc0 = trunc nuw nsw i64 %v0 to i8
46+ %trunc1 = trunc nsw i64 %v1 to i8
4547 ret void
4648}
4749)IR" );
@@ -62,6 +64,8 @@ define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg, float
6264 auto *StI8 = cast<sandboxir::StoreInst>(&*It++);
6365 auto *FAdd0 = cast<sandboxir::BinaryOperator>(&*It++);
6466 auto *FAdd1 = cast<sandboxir::BinaryOperator>(&*It++);
67+ auto *Trunc0 = cast<sandboxir::TruncInst>(&*It++);
68+ auto *Trunc1 = cast<sandboxir::TruncInst>(&*It++);
6569
6670 sandboxir::LegalityAnalysis Legality;
6771 const auto &Result = Legality.canVectorize ({St0, St1});
@@ -98,6 +102,13 @@ define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg, float
98102 EXPECT_EQ (cast<sandboxir::Pack>(Result).getReason (),
99103 sandboxir::ResultReason::DiffMathFlags);
100104 }
105+ {
106+ // Check DiffWrapFlags
107+ const auto &Result = Legality.canVectorize ({Trunc0, Trunc1});
108+ EXPECT_TRUE (isa<sandboxir::Pack>(Result));
109+ EXPECT_EQ (cast<sandboxir::Pack>(Result).getReason (),
110+ sandboxir::ResultReason::DiffWrapFlags);
111+ }
101112}
102113
103114#ifndef NDEBUG
@@ -124,5 +135,8 @@ TEST_F(LegalityTest, LegalityResultDump) {
124135 EXPECT_TRUE (Matches (Legality.createLegalityResult <sandboxir::Pack>(
125136 sandboxir::ResultReason::DiffMathFlags),
126137 " Pack Reason: DiffMathFlags" ));
138+ EXPECT_TRUE (Matches (Legality.createLegalityResult <sandboxir::Pack>(
139+ sandboxir::ResultReason::DiffWrapFlags),
140+ " Pack Reason: DiffWrapFlags" ));
127141}
128142#endif // NDEBUG
0 commit comments