@@ -968,27 +968,10 @@ private Register addPhiOperands(Register variable, Instruction.Phi phi) {
968968 // The Phi's def was replaced
969969 // We must also replace all occurrences of the phi def from the memoized defs
970970 // 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 );
992975 }
993976
994977 // 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) {
10551038 }
10561039 // Since the phi is replaced by newvalue
10571040 // we must also update the memoized defs
1058- replaceDefs (phi , newValue );
1041+ replaceDefs (oldValue , newValue );
10591042 }
10601043
10611044 private List <Instruction > getUsesExcept (Instruction .Phi phi ) {
0 commit comments