First pass at emitIAS for branches and binding labels
Currently not testing fixups of forward branches and
instead streaming a ".byte (foo - (. + 1))" or
".long (foo - (. + 4))". It should be supported once
emitIAS() delays writing things out until after the
function is fully emitted (and therefore forward labels
have all been bound).
BUG=none
R=stichnot@chromium.org
Review URL: https://codereview.chromium.org/673543002
diff --git a/src/IceCfgNode.cpp b/src/IceCfgNode.cpp
index 4e4d36b..d715767 100644
--- a/src/IceCfgNode.cpp
+++ b/src/IceCfgNode.cpp
@@ -12,6 +12,7 @@
//
//===----------------------------------------------------------------------===//
+#include "assembler.h"
#include "IceCfg.h"
#include "IceCfgNode.h"
#include "IceInst.h"
@@ -491,6 +492,10 @@
Str << Func->getContext()->mangleName(Func->getFunctionName()) << ":\n";
}
Str << getAsmName() << ":\n";
+ if (Func->useIntegratedAssembler()) {
+ Assembler *Asm = Func->getAssembler<Assembler>();
+ Asm->BindCfgNodeLabel(getIndex());
+ }
for (InstPhi *Phi : Phis) {
if (Phi->isDeleted())
continue;
@@ -505,7 +510,7 @@
// suppress them.
if (I->isRedundantAssign())
continue;
- if (Func->UseIntegratedAssembler()) {
+ if (Func->useIntegratedAssembler()) {
I->emitIAS(Func);
} else {
I->emit(Func);