32 lines · plain
1; RUN: llc %s -o - -O0 -regalloc=fast | FileCheck %s2target datalayout = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128"3target triple = "i386-apple-macosx10.10"4 5@c = external global i8, align 16@p = thread_local global ptr null, align 47 8; Check that regalloc fast correctly preserves EAX that is set by the TLS call9; until the actual use.10; PR26485.11;12; CHECK-LABEL: f:13; Get c.14; C is spilled because of the scheduling of the instructions,15; but a smarter regalloc wouldn't have spilled it.16; CHECK: movl L_c{{[^,]*}}, [[C_ADDR:%[a-z]+]]17; CHECK-NEXT: movl [[C_ADDR]], [[C_SPILLED:[0-8]+\(%esp\)]]18; Get p.19; CHECK-NEXT: movl _p@{{[0-9a-zA-Z]+}}, [[P_ADDR:%[a-z]+]]20; CHECK-NEXT: calll *([[P_ADDR]])21; At this point eax contiains the address of p.22; Load c address.23; Make sure we do not clobber eax.24; CHECK-NEXT: movl [[C_SPILLED]], [[C_ADDR_RELOADED:%e[b-z]x+]]25; Store c address into p.26; CHECK-NEXT: movl [[C_ADDR_RELOADED]], (%eax)27define void @f() #0 {28entry:29 store ptr @c, ptr @p, align 430 ret void31}32