summaryrefslogtreecommitdiff
path: root/polly
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2022-07-07 12:27:43 +0200
committerNikita Popov <npopov@redhat.com>2022-07-15 10:18:17 +0200
commit2a721374aef326d4668f750d341c86d1aa1a0309 (patch)
tree234adf3c0ee20439eb8077b5a0702b4d88f35efa /polly
parentcae5462a2caa4a14516d3935d2ca3a1f1d0522c9 (diff)
downloadllvm-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.ll2
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: