yonghong-song wrote:

@teresajohnson Just uploaded another revision. Major changes are to rename 
RenameOnPromotion to NotRenameONPromotion and default of NotRenameOnPromotion 
is false (doing rename on promotion true by default). This is for distributed 
ThinLTO since for distributed ThinLTO, the GV summaries will be saved in 
ThinLTO before the ThinLTOBackend and restored in ThinLTOBackend. In this case, 
we need to preserve the NotRenameOnPromotion value.

But unfortunately my current implementation does not work for distributed 
thinLTO.
Compare
```
          llvm/test/ThinLTO/X86/reduce-promotion-same-local-name.ll
```
and
```
          llvm/test/ThinLTO/X86/reduce-promotion-same-local-name-distributed.ll
```
The test reduce-promotion-same-local-name-distributed.ll is not working. The 
reason is

```
$ llvm-dis a.bc.thinlto.bc -o -
        ; ModuleID = 'a.bc.thinlto.bc'
        source_filename = "a.bc.thinlto.bc"
        ^0 = module: (path: "a.bc", hash: (660090884, 3143855212, 3403690426, 
569036544, 3527848429))
        ^1 = module: (path: "b.bc", hash: (3844350569, 1286968882, 1839731117, 
2253963201, 2649961830))
        ^2 = gv: (guid: 402851794460930730, summaries: (function: (module: ^1, 
flags: (linkage: external, visibility: default, notEligibleToImport: 0, live: 
1, dsoLocal: 1, canAutoHide: 0, importType: definition, notRenameOnPromotion: 
0), insts: 5)))
        ^3 = gv: (guid: 2051336639867817221, summaries: (function: (module: ^0, 
flags: (linkage: internal, visibility: default, notEligibleToImport: 0, live: 
1, dsoLocal: 1, canAutoHide: 0, importType: definition, notRenameOnPromotion: 
0), insts: 3, funcFlags: (readNone: 0, readOnly: 0, noRecurse: 0, 
returnDoesNotAlias: 0, noInline: 1, alwaysInline: 0, noUnwind: 0, mayThrow: 0, 
hasUnknownCall: 0, mustBeUnreachable: 0))))
        ^4 = gv: (guid: 14574395900695837614, summaries: (function: (module: 
^0, flags: (linkage: external, visibility: default, notEligibleToImport: 0, 
live: 1, dsoLocal: 1, canAutoHide: 0, importType: definition, 
notRenameOnPromotion: 0), insts: 5, calls: ((callee: ^3, tail: 1), (callee: ^2, 
tail: 1)))))
        ^5 = flags: 1249
        ^6 = blockcount: 0
    
$ llvm-dis b.bc.thinlto.bc -o -
       ; ModuleID = 'b.bc.thinlto.bc'
       source_filename = "b.bc.thinlto.bc"
    
       ^0 = module: (path: "b.bc", hash: (3844350569, 1286968882, 1839731117, 
2253963201, 2649961830))
       ^1 = gv: (guid: 402851794460930730, summaries: (function: (module: ^0, 
flags: (linkage: external, visibility: default, notEligibleToImport: 0, live: 
1, dsoLocal: 1, canAutoHide: 0, importType: definition, notRenameOnPromotion: 
0), insts: 5, calls: ((callee: ^2, tail: 1)))))
       ^2 = gv: (guid: 12472750527131441673, summaries: (function: (module: ^0, 
flags: (linkage: available_externally, visibility: default, 
notEligibleToImport: 0, live: 1, dsoLocal: 1, canAutoHide: 0, importType: 
definition, notRenameOnPromotion: 1), insts: 3, funcFlags: (readNone: 0, 
readOnly: 0, noRecurse: 0, returnDoesNotAlias: 0, noInline: 1, alwaysInline: 0, 
noUnwind: 0, mayThrow: 0, hasUnknownCall: 0, mustBeUnreachable: 0))))
       ^3 = flags: 1249
       ^4 = blockcount: 0
```
In distributed mode, the index for each file is constructed in the above.
See b.bc.thinlto.bc, function 'foo' has notRenameOnPromotion = 1, so no 
promotion.
But in a.bc.thinlto.bc, there is no function 'foo'. The function-import pass 
cannot find a summary for it.
So in a.bc.thinlto.bc, function 'foo' will be promoted.
This caused the problem.

To fix the problem, we should add 'foo' summary (in module b.bc.thinlto.bc) to 
a..bc.thinlto.bc. But not sure exactly where we should do it?

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

Reply via email to