aboutsummaryrefslogtreecommitdiff
path: root/test/val/Validate.SSA.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/val/Validate.SSA.cpp')
-rw-r--r--test/val/Validate.SSA.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/test/val/Validate.SSA.cpp b/test/val/Validate.SSA.cpp
index 9b748879..d37b6461 100644
--- a/test/val/Validate.SSA.cpp
+++ b/test/val/Validate.SSA.cpp
@@ -1185,6 +1185,29 @@ TEST_F(ValidateSSA, PhiUseMayComeFromNonDominatingBlockGood) {
ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()) << getDiagnosticString();
}
+TEST_F(ValidateSSA, PhiUsesItsOwnDefinitionGood) {
+ // See https://github.com/KhronosGroup/SPIRV-Tools/issues/415
+ //
+ // Non-phi instructions can't use their own definitions, as
+ // already checked in test DominateUsageSameInstructionBad.
+ string str = kHeader + "OpName %loop \"loop\"\n" +
+ "OpName %value \"value\"\n" + kBasicTypes +
+ R"(
+%func = OpFunction %voidt None %vfunct
+%entry = OpLabel
+ OpBranch %loop
+
+%loop = OpLabel
+%value = OpPhi %boolt %false %entry %value %loop
+ OpBranch %loop
+
+ OpFunctionEnd
+)";
+
+ CompileSuccessfully(str);
+ ASSERT_EQ(SPV_SUCCESS, ValidateInstructions()) << getDiagnosticString();
+}
+
TEST_F(ValidateSSA, PhiVariableDefNotDominatedByParentBlockBad) {
string str = kHeader + "OpName %if_true \"if_true\"\n" +
"OpName %if_false \"if_false\"\n" + "OpName %exit \"exit\"\n" +