Skip to content

Commit 4f57852

Browse files
authored
Merge pull request github#13787 from jketema/ssa-text-case
C++: Add IR SSA test case for the ternary operator
2 parents 412cf55 + 4c9c5d8 commit 4f57852

File tree

5 files changed

+174
-0
lines changed

5 files changed

+174
-0
lines changed

cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2157,3 +2157,46 @@ ssa.cpp:
21572157
# 431| v431_9(void) = ReturnValue : &:r431_8, m435_4
21582158
# 431| v431_10(void) = AliasedUse : m431_3
21592159
# 431| v431_11(void) = ExitFunction :
2160+
2161+
# 438| void Conditional(bool, int, int)
2162+
# 438| Block 0
2163+
# 438| v438_1(void) = EnterFunction :
2164+
# 438| m438_2(unknown) = AliasedDefinition :
2165+
# 438| m438_3(unknown) = InitializeNonLocal :
2166+
# 438| m438_4(unknown) = Chi : total:m438_2, partial:m438_3
2167+
# 438| r438_5(glval<bool>) = VariableAddress[a] :
2168+
# 438| m438_6(bool) = InitializeParameter[a] : &:r438_5
2169+
# 438| r438_7(glval<int>) = VariableAddress[x] :
2170+
# 438| m438_8(int) = InitializeParameter[x] : &:r438_7
2171+
# 438| r438_9(glval<int>) = VariableAddress[y] :
2172+
# 438| m438_10(int) = InitializeParameter[y] : &:r438_9
2173+
# 439| r439_1(glval<int>) = VariableAddress[z] :
2174+
# 439| r439_2(glval<bool>) = VariableAddress[a] :
2175+
# 439| r439_3(bool) = Load[a] : &:r439_2, m438_6
2176+
# 439| v439_4(void) = ConditionalBranch : r439_3
2177+
#-----| False -> Block 3
2178+
#-----| True -> Block 2
2179+
2180+
# 439| Block 1
2181+
# 439| m439_5(int) = Phi : from 2:m439_12, from 3:m439_16
2182+
# 439| r439_6(glval<int>) = VariableAddress[#temp439:13] :
2183+
# 439| r439_7(int) = Load[#temp439:13] : &:r439_6, m439_5
2184+
# 439| m439_8(int) = Store[z] : &:r439_1, r439_7
2185+
# 440| v440_1(void) = NoOp :
2186+
# 438| v438_11(void) = ReturnVoid :
2187+
# 438| v438_12(void) = AliasedUse : m438_3
2188+
# 438| v438_13(void) = ExitFunction :
2189+
2190+
# 439| Block 2
2191+
# 439| r439_9(glval<int>) = VariableAddress[x] :
2192+
# 439| r439_10(int) = Load[x] : &:r439_9, m438_8
2193+
# 439| r439_11(glval<int>) = VariableAddress[#temp439:13] :
2194+
# 439| m439_12(int) = Store[#temp439:13] : &:r439_11, r439_10
2195+
#-----| Goto -> Block 1
2196+
2197+
# 439| Block 3
2198+
# 439| r439_13(glval<int>) = VariableAddress[y] :
2199+
# 439| r439_14(int) = Load[y] : &:r439_13, m438_10
2200+
# 439| r439_15(glval<int>) = VariableAddress[#temp439:13] :
2201+
# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14
2202+
#-----| Goto -> Block 1

cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2146,3 +2146,46 @@ ssa.cpp:
21462146
# 431| v431_9(void) = ReturnValue : &:r431_8, m435_4
21472147
# 431| v431_10(void) = AliasedUse : m431_3
21482148
# 431| v431_11(void) = ExitFunction :
2149+
2150+
# 438| void Conditional(bool, int, int)
2151+
# 438| Block 0
2152+
# 438| v438_1(void) = EnterFunction :
2153+
# 438| m438_2(unknown) = AliasedDefinition :
2154+
# 438| m438_3(unknown) = InitializeNonLocal :
2155+
# 438| m438_4(unknown) = Chi : total:m438_2, partial:m438_3
2156+
# 438| r438_5(glval<bool>) = VariableAddress[a] :
2157+
# 438| m438_6(bool) = InitializeParameter[a] : &:r438_5
2158+
# 438| r438_7(glval<int>) = VariableAddress[x] :
2159+
# 438| m438_8(int) = InitializeParameter[x] : &:r438_7
2160+
# 438| r438_9(glval<int>) = VariableAddress[y] :
2161+
# 438| m438_10(int) = InitializeParameter[y] : &:r438_9
2162+
# 439| r439_1(glval<int>) = VariableAddress[z] :
2163+
# 439| r439_2(glval<bool>) = VariableAddress[a] :
2164+
# 439| r439_3(bool) = Load[a] : &:r439_2, m438_6
2165+
# 439| v439_4(void) = ConditionalBranch : r439_3
2166+
#-----| False -> Block 3
2167+
#-----| True -> Block 2
2168+
2169+
# 439| Block 1
2170+
# 439| m439_5(int) = Phi : from 2:m439_12, from 3:m439_16
2171+
# 439| r439_6(glval<int>) = VariableAddress[#temp439:13] :
2172+
# 439| r439_7(int) = Load[#temp439:13] : &:r439_6, m439_5
2173+
# 439| m439_8(int) = Store[z] : &:r439_1, r439_7
2174+
# 440| v440_1(void) = NoOp :
2175+
# 438| v438_11(void) = ReturnVoid :
2176+
# 438| v438_12(void) = AliasedUse : m438_3
2177+
# 438| v438_13(void) = ExitFunction :
2178+
2179+
# 439| Block 2
2180+
# 439| r439_9(glval<int>) = VariableAddress[x] :
2181+
# 439| r439_10(int) = Load[x] : &:r439_9, m438_8
2182+
# 439| r439_11(glval<int>) = VariableAddress[#temp439:13] :
2183+
# 439| m439_12(int) = Store[#temp439:13] : &:r439_11, r439_10
2184+
#-----| Goto -> Block 1
2185+
2186+
# 439| Block 3
2187+
# 439| r439_13(glval<int>) = VariableAddress[y] :
2188+
# 439| r439_14(int) = Load[y] : &:r439_13, m438_10
2189+
# 439| r439_15(glval<int>) = VariableAddress[#temp439:13] :
2190+
# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14
2191+
#-----| Goto -> Block 1

cpp/ql/test/library-tests/ir/ssa/ssa.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,3 +434,7 @@ int noreturnTest2(int x) {
434434
}
435435
return x;
436436
}
437+
438+
void Conditional(bool a, int x, int y) {
439+
int z = a ? x : y;
440+
}

cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2002,3 +2002,45 @@ ssa.cpp:
20022002
# 431| v431_8(void) = ReturnValue : &:r431_7, m435_4
20032003
# 431| v431_9(void) = AliasedUse : ~m?
20042004
# 431| v431_10(void) = ExitFunction :
2005+
2006+
# 438| void Conditional(bool, int, int)
2007+
# 438| Block 0
2008+
# 438| v438_1(void) = EnterFunction :
2009+
# 438| mu438_2(unknown) = AliasedDefinition :
2010+
# 438| mu438_3(unknown) = InitializeNonLocal :
2011+
# 438| r438_4(glval<bool>) = VariableAddress[a] :
2012+
# 438| m438_5(bool) = InitializeParameter[a] : &:r438_4
2013+
# 438| r438_6(glval<int>) = VariableAddress[x] :
2014+
# 438| m438_7(int) = InitializeParameter[x] : &:r438_6
2015+
# 438| r438_8(glval<int>) = VariableAddress[y] :
2016+
# 438| m438_9(int) = InitializeParameter[y] : &:r438_8
2017+
# 439| r439_1(glval<int>) = VariableAddress[z] :
2018+
# 439| r439_2(glval<bool>) = VariableAddress[a] :
2019+
# 439| r439_3(bool) = Load[a] : &:r439_2, m438_5
2020+
# 439| v439_4(void) = ConditionalBranch : r439_3
2021+
#-----| False -> Block 3
2022+
#-----| True -> Block 2
2023+
2024+
# 439| Block 1
2025+
# 439| m439_5(int) = Phi : from 2:m439_12, from 3:m439_16
2026+
# 439| r439_6(glval<int>) = VariableAddress[#temp439:13] :
2027+
# 439| r439_7(int) = Load[#temp439:13] : &:r439_6, m439_5
2028+
# 439| m439_8(int) = Store[z] : &:r439_1, r439_7
2029+
# 440| v440_1(void) = NoOp :
2030+
# 438| v438_10(void) = ReturnVoid :
2031+
# 438| v438_11(void) = AliasedUse : ~m?
2032+
# 438| v438_12(void) = ExitFunction :
2033+
2034+
# 439| Block 2
2035+
# 439| r439_9(glval<int>) = VariableAddress[x] :
2036+
# 439| r439_10(int) = Load[x] : &:r439_9, m438_7
2037+
# 439| r439_11(glval<int>) = VariableAddress[#temp439:13] :
2038+
# 439| m439_12(int) = Store[#temp439:13] : &:r439_11, r439_10
2039+
#-----| Goto -> Block 1
2040+
2041+
# 439| Block 3
2042+
# 439| r439_13(glval<int>) = VariableAddress[y] :
2043+
# 439| r439_14(int) = Load[y] : &:r439_13, m438_9
2044+
# 439| r439_15(glval<int>) = VariableAddress[#temp439:13] :
2045+
# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14
2046+
#-----| Goto -> Block 1

cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2002,3 +2002,45 @@ ssa.cpp:
20022002
# 431| v431_8(void) = ReturnValue : &:r431_7, m435_4
20032003
# 431| v431_9(void) = AliasedUse : ~m?
20042004
# 431| v431_10(void) = ExitFunction :
2005+
2006+
# 438| void Conditional(bool, int, int)
2007+
# 438| Block 0
2008+
# 438| v438_1(void) = EnterFunction :
2009+
# 438| mu438_2(unknown) = AliasedDefinition :
2010+
# 438| mu438_3(unknown) = InitializeNonLocal :
2011+
# 438| r438_4(glval<bool>) = VariableAddress[a] :
2012+
# 438| m438_5(bool) = InitializeParameter[a] : &:r438_4
2013+
# 438| r438_6(glval<int>) = VariableAddress[x] :
2014+
# 438| m438_7(int) = InitializeParameter[x] : &:r438_6
2015+
# 438| r438_8(glval<int>) = VariableAddress[y] :
2016+
# 438| m438_9(int) = InitializeParameter[y] : &:r438_8
2017+
# 439| r439_1(glval<int>) = VariableAddress[z] :
2018+
# 439| r439_2(glval<bool>) = VariableAddress[a] :
2019+
# 439| r439_3(bool) = Load[a] : &:r439_2, m438_5
2020+
# 439| v439_4(void) = ConditionalBranch : r439_3
2021+
#-----| False -> Block 3
2022+
#-----| True -> Block 2
2023+
2024+
# 439| Block 1
2025+
# 439| m439_5(int) = Phi : from 2:m439_12, from 3:m439_16
2026+
# 439| r439_6(glval<int>) = VariableAddress[#temp439:13] :
2027+
# 439| r439_7(int) = Load[#temp439:13] : &:r439_6, m439_5
2028+
# 439| m439_8(int) = Store[z] : &:r439_1, r439_7
2029+
# 440| v440_1(void) = NoOp :
2030+
# 438| v438_10(void) = ReturnVoid :
2031+
# 438| v438_11(void) = AliasedUse : ~m?
2032+
# 438| v438_12(void) = ExitFunction :
2033+
2034+
# 439| Block 2
2035+
# 439| r439_9(glval<int>) = VariableAddress[x] :
2036+
# 439| r439_10(int) = Load[x] : &:r439_9, m438_7
2037+
# 439| r439_11(glval<int>) = VariableAddress[#temp439:13] :
2038+
# 439| m439_12(int) = Store[#temp439:13] : &:r439_11, r439_10
2039+
#-----| Goto -> Block 1
2040+
2041+
# 439| Block 3
2042+
# 439| r439_13(glval<int>) = VariableAddress[y] :
2043+
# 439| r439_14(int) = Load[y] : &:r439_13, m438_9
2044+
# 439| r439_15(glval<int>) = VariableAddress[#temp439:13] :
2045+
# 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14
2046+
#-----| Goto -> Block 1

0 commit comments

Comments
 (0)