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