llvm/test/Transforms/Inline/2007-04-15-InlineEH.ll
Duncan Sands fd7b326bea Make invokes of inline asm legal. Teach codegen
how to lower them (with no attempt made to be
efficient, since they should only occur for
unoptimized code).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45108 91177308-0d34-0410-b5e6-96231b3b80d8
2007-12-17 18:08:19 +00:00

50 lines
1.6 KiB
LLVM

; RUN: llvm-as < %s | opt -inline | llvm-dis | not grep {invoke void asm}
; PR1335
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"
target triple = "i686-pc-linux-gnu"
%struct.gnat__strings__string_access = type { i8*, %struct.string___XUB* }
%struct.string___XUB = type { i32, i32 }
define void @bc__support__high_resolution_time__clock() {
entry:
call void asm "rdtsc\0A\09movl %eax, $0\0A\09movl %edx, $1", "=*imr,=*imr,~{dirflag},~{fpsr},~{flags},~{dx},~{ax}"( i32* null, i32* null ) nounwind
unreachable
}
define fastcc void @bc__support__high_resolution_time__initialize_clock_rate() {
entry:
invoke void @gnat__os_lib__getenv( %struct.gnat__strings__string_access* null )
to label %invcont unwind label %cleanup144
invcont: ; preds = %entry
invoke void @ada__calendar__delays__delay_for( )
to label %invcont64 unwind label %cleanup144
invcont64: ; preds = %invcont
invoke void @ada__calendar__clock( )
to label %invcont65 unwind label %cleanup144
invcont65: ; preds = %invcont64
invoke void @bc__support__high_resolution_time__clock( )
to label %invcont67 unwind label %cleanup144
invcont67: ; preds = %invcont65
ret void
cleanup144: ; preds = %invcont65, %invcont64, %invcont, %entry
unwind
}
declare void @gnat__os_lib__getenv(%struct.gnat__strings__string_access*)
declare void @ada__calendar__delays__delay_for()
declare void @ada__calendar__clock()
define void @bc__support__high_resolution_time___elabb() {
entry:
call fastcc void @bc__support__high_resolution_time__initialize_clock_rate( )
ret void
}