xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/stack-protector-vreg-to-vreg-copy.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple i386-unknown-freebsd10.0 -march=x86 --relocation-model=pic %s -o -
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; PR16979
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workertarget 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-f80:32:32-n8:16:32-S128"
6*9880d681SAndroid Build Coastguard Workertarget triple = "i386-unknown-freebsd10.0"
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker@state = internal unnamed_addr global i32 0, align 4
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind sspreq
11*9880d681SAndroid Build Coastguard Workerdefine void @set_state(i32 %s) #0 {
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  store i32 %s, i32* @state, align 4
14*9880d681SAndroid Build Coastguard Worker  ret void
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind sspreq
18*9880d681SAndroid Build Coastguard Workerdefine void @zero_char(i8* nocapture %p) #0 {
19*9880d681SAndroid Build Coastguard Workerentry:
20*9880d681SAndroid Build Coastguard Worker  store i8 0, i8* %p, align 1
21*9880d681SAndroid Build Coastguard Worker  tail call void @g(i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0) #2
22*9880d681SAndroid Build Coastguard Worker  ret void
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerdeclare void @g(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) #1
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind sspreq
28*9880d681SAndroid Build Coastguard Workerdefine void @do_something(i32 %i) #0 {
29*9880d681SAndroid Build Coastguard Workerentry:
30*9880d681SAndroid Build Coastguard Worker  %data = alloca [8 x i8], align 1
31*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* @state, align 4
32*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %0, 0
33*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.else
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
36*9880d681SAndroid Build Coastguard Worker  tail call fastcc void @send_int(i32 0)
37*9880d681SAndroid Build Coastguard Worker  br label %if.end
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerif.else:                                          ; preds = %entry
40*9880d681SAndroid Build Coastguard Worker  tail call fastcc void @send_int(i32 %i)
41*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [8 x i8], [8 x i8]* %data, i32 0, i32 0
42*9880d681SAndroid Build Coastguard Worker  call void @zero_char(i8* %arrayidx)
43*9880d681SAndroid Build Coastguard Worker  br label %if.end
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.else, %if.then
46*9880d681SAndroid Build Coastguard Worker  ret void
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind sspreq
50*9880d681SAndroid Build Coastguard Workerdefine internal fastcc void @send_int(i32 %p) #0 {
51*9880d681SAndroid Build Coastguard Workerentry:
52*9880d681SAndroid Build Coastguard Worker  tail call void @f(i32 %p) #2
53*9880d681SAndroid Build Coastguard Worker  tail call void @g(i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0) #2
54*9880d681SAndroid Build Coastguard Worker  ret void
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdeclare void @f(i32) #1
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind sspreq "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
60*9880d681SAndroid Build Coastguard Workerattributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
61*9880d681SAndroid Build Coastguard Workerattributes #2 = { nounwind }
62