nickdesaulniers abandoned this revision.
nickdesaulniers added a comment.

In D115409#3190589 <https://reviews.llvm.org/D115409#3190589>, @jyknight wrote:

> OK, I do think that special case definitely needs to be deleted. It's 
> assuming that the block args are in a particular place in the argument list 
> of the callbr -- the place Clang put them -- and then assigned special 
> behavior based on that location. But I think it shouldn't do so -- they 
> should be able to placed anywhere in the arglist.
>
> The question then, is why this code needs to exist? It's accomplishing two 
> things:
>
> 1. If we get rid of this code but continue to use the "X" constraint, llvm 
> won't emit an immediate symbol reference (today), rather, it will emit a 
> register reference instead.  Even though X means "accept anything", and 
> therefore a register is thus supposedly acceptable, it seems like it should 
> probably prefer emitting an immediate if it can. (GCC does emit it as an 
> immediate here)

Done in https://reviews.llvm.org/D115688. Closing this in favor of that. PTAL.

> 2. Emits a TargetBlockAddress instead of BlockAddress. (I'm not sure what the 
> use of TargetBlockAddress accomplishes? I _think_ it should be okay to use 
> BlockAddress instead, but I'm not 100% sure...)

Not sure about this either way. Perhaps something for reviewers to consider.

> Assuming the  point 2 is OK, then I think ideally, we'd flip the order of 
> things, and do:
> a. Cause "X" constraint to emit an immediate symbol reference if it can, 
> rather than copying to a register first -- and remove this special case. 
> (Fixes bug.)
> b. Updates tests and change clang to emit "i" instead of "X" constraints. 
> (Clarifies intent that an immediate is actually required).

Now for me to rebase D115410 <https://reviews.llvm.org/D115410>, D115311 
<https://reviews.llvm.org/D115311>, and D115471 
<https://reviews.llvm.org/D115471> onto D115688 
<https://reviews.llvm.org/D115688>.



================
Comment at: llvm/test/CodeGen/X86/callbr-asm-bb-exports.ll:23
+; CHECK-NEXT: t30: ch,glue = inlineasm_br t22, {{.*}}, t22:1
+; CHECK-NEXT: t32: ch = br t30, BasicBlock:ch
 
----------------
craig.topper wrote:
> nickdesaulniers wrote:
> > @craig.topper can you triple check this change to this whole file 
> > carefully, please?
> > 
> > I'm not sure TBH why my change to SelectionDAGBuilder changed this.  I'm 
> > also not sure of the original intent of the test. It's running 
> > `-debug-only=isel` which prints A LOT of different phases; I'm not sure 
> > which it was originally testing.
> > 
> > I'm not sure why we get an `BlockAddress` now; I don't really understand 
> > the output from selectionDAG here. (`t16` looks unused to me, IIUC).
> I think the important thing was that the t22 CopyFromReg chain output is used 
> by the inlineasm_br.
> 
> I'm guessing the BlockAddress is being created by the `getValue` call in the 
> else that is now reachable?
> 
> Maybe my regex to ignore most of the inlineasm_br line is hiding too much.
Sounds like I should pre-commit (before D115688) a change that unrolls the 
regex?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115409/new/

https://reviews.llvm.org/D115409

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to