77 lines · plain
1; RUN: llc -O2 --relocation-model=pic -mtriple=i386-unknown-linux-gnu < %s 2>&1 | FileCheck %s2 3; List the source code:4; // clang -m32 -fasm-blocks -S t.c -O2 -fpic -emit-llvm5; int GV = 17;6;7; extern unsigned int extern_func();8; static unsigned int static_func() __attribute__((noinline));9; static unsigned int static_func() {10; return GV++;11; }12;13; void func() {14; static_func();15; __asm {16; call static_func17; call extern_func18; jmp extern_func19; shr eax, 020; shr ebx, 021; shr ecx, 022; shr edx, 023; shr edi, 024; shr esi, 025; shr ebp, 026; shr esp, 027; }28; }29 30@GV = local_unnamed_addr global i32 17, align 431 32define void @func() local_unnamed_addr #0 {33; CHECK-LABEL: func:34; CHECK: calll .L0$pb35; CHECK-NEXT: .L0$pb:36; CHECK-NEXT: popl %ebx37; CHECK-NEXT: .Ltmp0:38; CHECK-NEXT: addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp0-.L0$pb), %ebx39; CHECK-NEXT: calll static_func40; CHECK-NEXT: pushl %ebp41; CHECK-NEXT: subl $12, %esp42; CHECK-NEXT: #APP43; CHECK-EMPTY:44; CHECK-NEXT: calll static_func45; CHECK-NEXT: calll extern_func@PLT46; CHECK-NEXT: jmp extern_func@PLT47; CHECK-NEXT: shrl $0, %eax48; CHECK-NEXT: shrl $0, %ebx49; CHECK-NEXT: shrl $0, %ecx50; CHECK-NEXT: shrl $0, %edx51; CHECK-NEXT: shrl $0, %edi52; CHECK-NEXT: shrl $0, %esi53; CHECK-NEXT: shrl $0, %ebp54; CHECK-NEXT: shrl $0, %esp55; CHECK-EMPTY:56; CHECK-NEXT: #NO_APP57; CHECK-NEXT: addl $12, %esp58; CHECK-NEXT: popl %ebp59entry:60 %call = tail call i32 @static_func()61;; We test call, CALL, and jmp.62 tail call void asm sideeffect inteldialect "call ${0:P}\0A\09CALL ${1:P}\0A\09jmp ${1:P}\0A\09shr eax, $$0\0A\09shr ebx, $$0\0A\09shr ecx, $$0\0A\09shr edx, $$0\0A\09shr edi, $$0\0A\09shr esi, $$0\0A\09shr ebp, $$0\0A\09shr esp, $$0", "*m,*m,~{eax},~{ebp},~{ebx},~{ecx},~{edi},~{edx},~{flags},~{esi},~{esp},~{dirflag},~{fpsr},~{flags}"(ptr nonnull elementtype(i32 (...)) @static_func, ptr nonnull elementtype(i32 (...)) @extern_func) #063 ret void64}65 66declare i32 @extern_func(...) #067 68define internal i32 @static_func() #0 {69entry:70 %0 = load i32, ptr @GV, align 471 %inc = add nsw i32 %0, 172 store i32 %inc, ptr @GV, align 473 ret i32 %074}75 76attributes #0 = { nounwind }77