@@ -968,27 +968,10 @@ private Register addPhiOperands(Register variable, Instruction.Phi phi) {
968
968
// The Phi's def was replaced
969
969
// We must also replace all occurrences of the phi def from the memoized defs
970
970
// per Basic Block
971
- private void replaceDefs (Instruction .Phi phi , Register newValue ) {
972
- // TODO rethink the data structure for currentDef
973
- var def = phi .value ();
974
- var defs = currentDef .get (def .nonSSAId ());
975
- // Make a list of block/reg that we need to update
976
- var bbList = new ArrayList <BasicBlock >();
977
- var regList = new ArrayList <Register >();
978
- for (var entries : defs .entrySet ()) {
979
- var bb = entries .getKey ();
980
- var reg = entries .getValue ();
981
- if (reg .equals (def )) {
982
- bbList .add (bb );
983
- regList .add (reg );
984
- }
985
- }
986
- // Now replace the phi def
987
- for (int i = 0 ; i < bbList .size (); i ++) {
988
- var bb = bbList .get (i );
989
- var reg = regList .get (i );
990
- defs .replace (bb , reg , newValue );
991
- }
971
+ private void replaceDefs (Register oldValue , Register newValue ) {
972
+ var defs = currentDef .get (oldValue .nonSSAId ());
973
+ for (var bb : defs .keySet ())
974
+ defs .replace (bb , oldValue , newValue );
992
975
}
993
976
994
977
// reference implementation https://github.com/dibyendumajumdar/libfirm/blob/master/ir/ir/ircons.c#L97
@@ -1055,7 +1038,7 @@ private void replacePhiValueAndUsers(Instruction.Phi phi, Register newValue) {
1055
1038
}
1056
1039
// Since the phi is replaced by newvalue
1057
1040
// we must also update the memoized defs
1058
- replaceDefs (phi , newValue );
1041
+ replaceDefs (oldValue , newValue );
1059
1042
}
1060
1043
1061
1044
private List <Instruction > getUsesExcept (Instruction .Phi phi ) {
0 commit comments