brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · d3ca872 Raw
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