In Linux PIC model, there are 4 cases about value/label addressing:
Case 1: Function call or Label jmp inside the module.
Case 2: Data access (such as global variable, static variable) inside the module.
Case 3: Function call or Label jmp outside the module.
Case 4: Data access (such as global variable) outside the module.
Due to current llvm inline asm architecture designed to not "recognize" the asm
code, there are quite troubles for us to treat mem addressing differently for
same value/adress used in different instuctions.
For example, in pic model, call a func may in plt way or direclty pc-related,
but lea/mov a function adress may use got.
This patch fix/refine the case 1 and case 3 in inline asm.
(I prefer to fix/refine case 2 and case 4 problems later, in another patch)
Due to currently inline asm didn't support jmp the outsider lable, this patch
mainly focus on fix the function call addressing bugs in inline asm.
Example:
Before this fix we can't successfully/correctly build the test https://godbolt.org/z/jGvEET3q3 with clang
(The test is the source file of lit test llvm/test/CodeGen/X86/inline-asm-function-call-pic.ll )
Add a description comment