================

----------------
w2yehia wrote:

you're right. Actually, we did an offline code review yesterday and decided to 
just remove the assert.

Prior to this PR, all platforms (`isOSBinFormatELF` and `isOSBinFormatMachO`) 
who supported ifunc did their special codegen in one place: a non-virtual 
function `AsmPrinter::emitGlobalIFunc` (the one we're commenting on now) by 
doing `if ((isPlatform1)) {...} else { assert(isPlatform2()); ... }` and inside 
some implementations they called a bunch of virtual functions that are only 
implemented in the derived class of AsmPrinter corresponding to that 
implementation (e.g. `emitMachOIFuncStubBody`). 
I thought for AIX, it's cleaner to have it's own implementation of 
`emitGlobalIFunc`, so I made `emitGlobalIFunc` virtual and overrode it in 
`PPCAIXAsmPrinter`. Technically, the other platforms can be refactored to use 
this method but not 100% sure.

An alternative to what I did, is to keep `emitGlobalIFunc` a non-virtual, and 
then add at the beginning of `AsmPrinter::emitGlobalIFunc`: 
```
if (TM.getTargetTriple().isOSBinFormatXCOFF()) {
  emitGlobalIFuncOnAIX(M, GI);
  return;
}
```
and then define `emitGlobalIFuncOnAIX` as a virtual in AsmPrinter with an 
implementation that does `assert(false)`, and override it in `PPCAIXAsmPrinter` 
with an implementation equivalent to what I have now in 
`PPCAIXAsmPrinter::emitGlobalIFunc`.

https://github.com/llvm/llvm-project/pull/153049
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to