mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-20 00:20:11 +00:00
Add a new attribute called 'jumptable' that creates jump-instruction tables for functions marked with this attribute.
It includes a pass that rewrites all indirect calls to jumptable functions to pass through these tables. This also adds backend support for generating the jump-instruction tables on ARM and X86. Note that since the jumptable attribute creates a second function pointer for a function, any function marked with jumptable must also be marked with unnamed_addr. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210280 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -203,7 +203,7 @@ define void @f34()
|
||||
; CHECK: define void @f34()
|
||||
{
|
||||
call void @nobuiltin() nobuiltin
|
||||
; CHECK: call void @nobuiltin() #24
|
||||
; CHECK: call void @nobuiltin() #25
|
||||
ret void;
|
||||
}
|
||||
|
||||
@@ -223,6 +223,12 @@ define nonnull i8* @f37(i8* nonnull %a) {
|
||||
ret i8* %a
|
||||
}
|
||||
|
||||
define void @f38() unnamed_addr jumptable {
|
||||
; CHECK: define void @f38() unnamed_addr #24
|
||||
call void bitcast (void (i8*)* @f36 to void ()*)()
|
||||
unreachable
|
||||
}
|
||||
|
||||
; CHECK: attributes #0 = { noreturn }
|
||||
; CHECK: attributes #1 = { nounwind }
|
||||
; CHECK: attributes #2 = { readnone }
|
||||
@@ -247,5 +253,5 @@ define nonnull i8* @f37(i8* nonnull %a) {
|
||||
; CHECK: attributes #21 = { sspstrong }
|
||||
; CHECK: attributes #22 = { minsize }
|
||||
; CHECK: attributes #23 = { noinline optnone }
|
||||
; CHECK: attributes #24 = { nobuiltin }
|
||||
|
||||
; CHECK: attributes #24 = { jumptable }
|
||||
; CHECK: attributes #25 = { nobuiltin }
|
||||
|
||||
Reference in New Issue
Block a user