@@ -120,6 +120,17 @@ def constant_pool : SDNodeXForm<imm, [{
120120 return CurDAG->getTargetConstantPool(N->getConstantIntValue(), PtrVT);
121121}]>;
122122
123+ def default_far_return : SDNodeXForm<imm, [{
124+ (void)N;
125+ MVT PtrVT = getTargetLowering()->getPointerTy(CurDAG->getDataLayout());
126+ return CurDAG->getExternalSymbol("DEFAULT_FAR_RETURN", PtrVT);
127+ }]>;
128+ def default_far_revert : SDNodeXForm<imm, [{
129+ (void)N;
130+ MVT PtrVT = getTargetLowering()->getPointerTy(CurDAG->getDataLayout());
131+ return CurDAG->getExternalSymbol("DEFAULT_FAR_REVERT", PtrVT);
132+ }]>;
133+
123134//===----------------------------------------------------------------------===//
124135// Complex Pattern Definitions.
125136//===----------------------------------------------------------------------===//
@@ -1040,10 +1051,8 @@ def : InstAlias<"ret.ok.to_label${cc} $dest", (RETrl R1, jmptarget:$dest, pred:$
10401051def : InstAlias<"ret.revert.to_label${cc} $dest", (REVERTrl R1, jmptarget:$dest, pred:$cc)>;
10411052}
10421053
1043- let isTerminator = 1, isBarrier = 1, isReturn = 1 in {
1044- def DEFAULT_FAR_RETURN : Pseudo<(outs), (ins GR256:$rs0, pred:$cc), [(EraVMreturn GR256:$rs0)]>;
1045- def DEFAULT_FAR_REVERT : Pseudo<(outs), (ins GR256:$rs0, pred:$cc), [(EraVMrevert GR256:$rs0)]>;
1046- }
1054+ def : Pat<(EraVMreturn GR256:$rs0), (RETrl GR256:$rs0, (default_far_return 0))>;
1055+ def : Pat<(EraVMrevert GR256:$rs0), (REVERTrl GR256:$rs0, (default_far_revert 0))>;
10471056
10481057//===----------------------------------------------------------------------===//
10491058// Constants materialization
0 commit comments