@@ -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) {
32+ define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg, float %farg0, float %farg1 ) {
3333 %gep0 = getelementptr float, ptr %ptr, i32 0
3434 %gep1 = getelementptr float, ptr %ptr, i32 1
3535 %gep3 = getelementptr float, ptr %ptr, i32 3
@@ -40,6 +40,8 @@ define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg) {
4040 store <2 x float> %vec2, ptr %gep1
4141 store <3 x float> %vec3, ptr %gep3
4242 store i8 %arg, ptr %gep1
43+ %fadd0 = fadd float %farg0, %farg0
44+ %fadd1 = fadd fast float %farg1, %farg1
4345 ret void
4446}
4547)IR" );
@@ -58,6 +60,8 @@ define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg) {
5860 auto *StVec2 = cast<sandboxir::StoreInst>(&*It++);
5961 auto *StVec3 = cast<sandboxir::StoreInst>(&*It++);
6062 auto *StI8 = cast<sandboxir::StoreInst>(&*It++);
63+ auto *FAdd0 = cast<sandboxir::BinaryOperator>(&*It++);
64+ auto *FAdd1 = cast<sandboxir::BinaryOperator>(&*It++);
6165
6266 sandboxir::LegalityAnalysis Legality;
6367 const auto &Result = Legality.canVectorize ({St0, St1});
@@ -87,6 +91,13 @@ define void @foo(ptr %ptr, <2 x float> %vec2, <3 x float> %vec3, i8 %arg) {
8791 EXPECT_EQ (cast<sandboxir::Pack>(Result).getReason (),
8892 sandboxir::ResultReason::DiffTypes);
8993 }
94+ {
95+ // Check DiffMathFlags
96+ const auto &Result = Legality.canVectorize ({FAdd0, FAdd1});
97+ EXPECT_TRUE (isa<sandboxir::Pack>(Result));
98+ EXPECT_EQ (cast<sandboxir::Pack>(Result).getReason (),
99+ sandboxir::ResultReason::DiffMathFlags);
100+ }
90101}
91102
92103#ifndef NDEBUG
@@ -110,5 +121,8 @@ TEST_F(LegalityTest, LegalityResultDump) {
110121 EXPECT_TRUE (Matches (Legality.createLegalityResult <sandboxir::Pack>(
111122 sandboxir::ResultReason::DiffTypes),
112123 " Pack Reason: DiffTypes" ));
124+ EXPECT_TRUE (Matches (Legality.createLegalityResult <sandboxir::Pack>(
125+ sandboxir::ResultReason::DiffMathFlags),
126+ " Pack Reason: DiffMathFlags" ));
113127}
114128#endif // NDEBUG
0 commit comments