diff options
author | Nikita Popov <npopov@redhat.com> | 2022-07-07 12:27:43 +0200 |
---|---|---|
committer | Nikita Popov <npopov@redhat.com> | 2022-07-15 10:18:17 +0200 |
commit | 2a721374aef326d4668f750d341c86d1aa1a0309 (patch) | |
tree | 234adf3c0ee20439eb8077b5a0702b4d88f35efa /polly | |
parent | cae5462a2caa4a14516d3935d2ca3a1f1d0522c9 (diff) | |
download | llvm-2a721374aef326d4668f750d341c86d1aa1a0309.tar.gz |
[IR] Don't use blockaddresses as callbr arguments
Following some recent discussions, this changes the representation
of callbrs in IR. The current blockaddress arguments are replaced
with `!` label constraints that refer directly to callbr indirect
destinations:
; Before:
%res = callbr i8* asm "", "=r,r,i"(i8* %x, i8* blockaddress(@test8, %foo))
to label %asm.fallthrough [label %foo]
; After:
%res = callbr i8* asm "", "=r,r,!i"(i8* %x)
to label %asm.fallthrough [label %foo]
The benefit of this is that we can easily update the successors of
a callbr, without having to worry about also updating blockaddress
references. This should allow us to remove some limitations:
* Allow unrolling/peeling/rotation of callbr, or any other
clone-based optimizations
(https://github.com/llvm/llvm-project/issues/41834)
* Allow duplicate successors
(https://github.com/llvm/llvm-project/issues/45248)
This is just the IR representation change though, I will follow up
with patches to remove limtations in various transformation passes
that are no longer needed.
Differential Revision: https://reviews.llvm.org/D129288
Diffstat (limited to 'polly')
-rw-r--r-- | polly/test/ScopDetect/callbr.ll | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/polly/test/ScopDetect/callbr.ll b/polly/test/ScopDetect/callbr.ll index 1981f0127e87..f226818a4ca1 100644 --- a/polly/test/ScopDetect/callbr.ll +++ b/polly/test/ScopDetect/callbr.ll @@ -12,7 +12,7 @@ target triple = "x86_64-unknown-linux-gnu" define void @func(i32 %n, double* noalias nonnull %A) { entry: - callbr void asm sideeffect "", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@func, %for)) #1 + callbr void asm sideeffect "", "!i,~{dirflag},~{fpsr},~{flags}"() #1 to label %fallthrough [label %for] fallthrough: |