@@ -87,26 +87,29 @@ public struct Phi {
87
87
return value. parentBlock
88
88
}
89
89
90
- public var incomingOperands : LazyMapSequence < PredecessorList , Operand > {
90
+ public func incomingOperand( inPredecessor predecessor: BasicBlock )
91
+ -> Operand {
91
92
let blockArgIdx = value. index
92
- return predecessors. lazy. map {
93
- switch $0. terminator {
94
- case let br as BranchInst :
95
- return br. operands [ blockArgIdx]
96
- case let condBr as CondBranchInst :
97
- if condBr. trueBlock == successor {
98
- assert ( condBr. falseBlock != successor)
99
- return condBr. trueOperands [ blockArgIdx]
100
- } else {
101
- assert ( condBr. falseBlock == successor)
102
- return condBr. falseOperands [ blockArgIdx]
103
- }
104
- default :
105
- fatalError ( " wrong terminator for phi-argument " )
93
+ switch predecessor. terminator {
94
+ case let br as BranchInst :
95
+ return br. operands [ blockArgIdx]
96
+ case let condBr as CondBranchInst :
97
+ if condBr. trueBlock == successor {
98
+ assert ( condBr. falseBlock != successor)
99
+ return condBr. trueOperands [ blockArgIdx]
100
+ } else {
101
+ assert ( condBr. falseBlock == successor)
102
+ return condBr. falseOperands [ blockArgIdx]
106
103
}
104
+ default :
105
+ fatalError ( " wrong terminator for phi-argument " )
107
106
}
108
107
}
109
108
109
+ public var incomingOperands : LazyMapSequence < PredecessorList , Operand > {
110
+ predecessors. lazy. map { incomingOperand ( inPredecessor: $0) }
111
+ }
112
+
110
113
public var incomingValues : LazyMapSequence < LazyMapSequence < PredecessorList , Operand > , Value > {
111
114
incomingOperands. lazy. map { $0. value }
112
115
}
0 commit comments