[Demangle] Add a few more options to the microsoft demangler
[llvm-complete.git] / test / CodeGen / X86 / lifetime-alias.ll
blob7631766c24920e3257a26152deda75f2fad1f456
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu  | FileCheck %s -check-prefix=CHECK
4 source_filename = "test_case.cc"
5 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
6 target triple = "x86_64-unknown-linux-gnu"
8 %"class.std::__3::basic_string" = type { %"class.std::__3::__compressed_pair" }
9 %"class.std::__3::__compressed_pair" = type { %"struct.std::__3::__compressed_pair_elem" }
10 %"struct.std::__3::__compressed_pair_elem" = type { %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__rep" }
11 %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__rep" = type { %union.anon }
12 %union.anon = type { %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__long" }
13 %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__long" = type { i8*, i64, i64 }
14 %struct.Agg = type { %"class.std::__3::basic_string", %"class.std::__3::basic_string" }
15 %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short" = type { [23 x i8], %struct.anon }
16 %struct.anon = type { i8 }
18 @do_not_optimize = dso_local global i8* null, align 8
19 @.str = private unnamed_addr constant [12 x i8] c"The Culture\00", align 1
20 @.str.1 = private unnamed_addr constant [22 x i8] c"FunnyItWorkedLastTime\00", align 1
21 @.str.2 = private unnamed_addr constant [19 x i8] c"agg.a2_[16] == 't'\00", align 1
22 @.str.3 = private unnamed_addr constant [13 x i8] c"test_case.cc\00", align 1
23 @__PRETTY_FUNCTION__.main = private unnamed_addr constant [11 x i8] c"int main()\00", align 1
25 ; Function Attrs: norecurse uwtable
26 define dso_local i8 @main() local_unnamed_addr #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
27 ; CHECK-LABEL: main:
28 ; CHECK:       # %bb.0: # %_ZNSt3__312basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev.exit50
29 ; CHECK-NEXT:    pushq %rax
30 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
31 ; CHECK-NEXT:    movaps {{.*#+}} xmm0 = [97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97]
32 ; CHECK-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
33 ; CHECK-NEXT:    movabsq $7016996765293437281, %rax # imm = 0x6161616161616161
34 ; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
35 ; CHECK-NEXT:    movw $5632, {{[0-9]+}}(%rsp) # imm = 0x1600
36 ; CHECK-NEXT:    xorps %xmm0, %xmm0
37 ; CHECK-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
38 ; CHECK-NEXT:    movabsq $8389209137051166804, %rax # imm = 0x746C754320656854
39 ; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
40 ; CHECK-NEXT:    movl $1701999988, -{{[0-9]+}}(%rsp) # imm = 0x65727574
41 ; CHECK-NEXT:    movb $0, -{{[0-9]+}}(%rsp)
42 ; CHECK-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
43 ; CHECK-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
44 ; CHECK-NEXT:    movb $21, -{{[0-9]+}}(%rsp)
45 ; CHECK-NEXT:    movabsq $7308613581744070988, %rax # imm = 0x656D69547473614C
46 ; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
47 ; CHECK-NEXT:    movups {{.*}}(%rip), %xmm1
48 ; CHECK-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
49 ; CHECK-NEXT:    movb $0, -{{[0-9]+}}(%rsp)
50 ; CHECK-NEXT:    movabsq $792633534417207296, %rax # imm = 0xB00000000000000
51 ; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
52 ; CHECK-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
53 ; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
54 ; CHECK-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
55 ; CHECK-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
56 ; CHECK-NEXT:    movb -{{[0-9]+}}(%rsp), %al
57 ; CHECK-NEXT:    movb %al, -{{[0-9]+}}(%rsp)
58 ; CHECK-NEXT:    movb -{{[0-9]+}}(%rsp), %al
59 ; CHECK-NEXT:    movb %al, -{{[0-9]+}}(%rsp)
60 ; CHECK-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
61 ; CHECK-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
62 ; CHECK-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
63 ; CHECK-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
64 ; CHECK-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
65 ; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
66 ; CHECK-NEXT:    movaps -{{[0-9]+}}(%rsp), %xmm1
67 ; CHECK-NEXT:    movups %xmm1, -{{[0-9]+}}(%rsp)
68 ; CHECK-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
69 ; CHECK-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
70 ; CHECK-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
71 ; CHECK-NEXT:    movq %rax, {{.*}}(%rip)
72 ; CHECK-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
73 ; CHECK-NEXT:    movq %rax, {{.*}}(%rip)
74 ; CHECK-NEXT:    cmpb $0, -{{[0-9]+}}(%rsp)
75 ; CHECK-NEXT:    jns .LBB0_1
76 ; CHECK-NEXT:  # %bb.2: # %_ZNSt3__312basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev.exit50
77 ; CHECK-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
78 ; CHECK-NEXT:    jmp .LBB0_3
79 ; CHECK-NEXT:  .LBB0_1:
80 ; CHECK-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
81 ; CHECK-NEXT:  .LBB0_3: # %_ZNSt3__312basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev.exit50
82 ; CHECK-NEXT:    movb 16(%rax), %al
83 ; CHECK-NEXT:    popq %rcx
84 ; CHECK-NEXT:    .cfi_def_cfa_offset 8
85 ; CHECK-NEXT:    retq
86 _ZNSt3__312basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev.exit50:
87   %padding = alloca %"class.std::__3::basic_string", align 8
88   %agg = alloca %struct.Agg, align 8
89   %agg.tmp = alloca %"class.std::__3::basic_string", align 8
90   %agg.tmp1 = alloca %"class.std::__3::basic_string", align 8
91   %0 = bitcast %"class.std::__3::basic_string"* %padding to i8*
92   call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull %0) #4
93   %__s2.i.i.i = bitcast %"class.std::__3::basic_string"* %padding to %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short"*
94   %__size_.i23.i.i = getelementptr inbounds %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short", %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short"* %__s2.i.i.i, i64 0, i32 1, i32 0
95   store i8 22, i8* %__size_.i23.i.i, align 1, !tbaa !2
96   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %0, i8 97, i64 22, i1 false) #4
97   %arrayidx.i.i = getelementptr inbounds i8, i8* %0, i64 22
98   store i8 0, i8* %arrayidx.i.i, align 2, !tbaa !2
99   %1 = bitcast %struct.Agg* %agg to i8*
100   call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %1) #4
101   %2 = bitcast %"class.std::__3::basic_string"* %agg.tmp to i8*
102   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %2, i8 0, i64 24, i1 false) #4
103   %__s2.i.i.i10 = bitcast %"class.std::__3::basic_string"* %agg.tmp to %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short"*
104   %__size_.i23.i.i11 = getelementptr inbounds %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short", %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short"* %__s2.i.i.i10, i64 0, i32 1, i32 0
105   store i8 11, i8* %__size_.i23.i.i11, align 1, !tbaa !2
106   call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 %2, i8* align 1 getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), i64 11, i1 false) #4
107   %arrayidx.i.i12 = getelementptr inbounds i8, i8* %2, i64 11
108   store i8 0, i8* %arrayidx.i.i12, align 1, !tbaa !2
109   %3 = bitcast %"class.std::__3::basic_string"* %agg.tmp1 to i8*
110   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %3, i8 0, i64 24, i1 false) #4
111   %__s2.i.i.i27 = bitcast %"class.std::__3::basic_string"* %agg.tmp1 to %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short"*
112   %__size_.i23.i.i28 = getelementptr inbounds %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short", %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short"* %__s2.i.i.i27, i64 0, i32 1, i32 0
113   store i8 21, i8* %__size_.i23.i.i28, align 1, !tbaa !2
114   call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 %3, i8* align 1 getelementptr inbounds ([22 x i8], [22 x i8]* @.str.1, i64 0, i64 0), i64 21, i1 false) #4
115   %arrayidx.i.i34 = getelementptr inbounds i8, i8* %3, i64 21
116   store i8 0, i8* %arrayidx.i.i34, align 1, !tbaa !2
117   call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 %1, i8* nonnull align 8 %2, i64 24, i1 false) #4
118   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %2, i8 0, i64 24, i1 false) #4
119   %a2_.i = getelementptr inbounds %struct.Agg, %struct.Agg* %agg, i64 0, i32 1
120   %4 = bitcast %"class.std::__3::basic_string"* %a2_.i to i8*
121   call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 %4, i8* nonnull align 8 %3, i64 24, i1 false) #4
122   call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %3, i8 0, i64 24, i1 false) #4
123   store volatile i8* %0, i8** @do_not_optimize, align 8, !tbaa !5
124   store volatile i8* %1, i8** @do_not_optimize, align 8, !tbaa !5
125   %__s.i.i.i = bitcast %"class.std::__3::basic_string"* %a2_.i to %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short"*
126   %__size_.i.i.i51 = getelementptr inbounds %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short", %"struct.std::__3::basic_string<char, std::__3::char_traits<char>, std::__3::allocator<char> >::__short"* %__s.i.i.i, i64 0, i32 1, i32 0
127   %5 = load i8, i8* %__size_.i.i.i51, align 1, !tbaa !2
128   %tobool.i.i.i = icmp slt i8 %5, 0
129   %__data_.i.i.i52 = getelementptr inbounds %"class.std::__3::basic_string", %"class.std::__3::basic_string"* %a2_.i, i64 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0
130   %6 = load i8*, i8** %__data_.i.i.i52, align 8
131   %cond.i.i = select i1 %tobool.i.i.i, i8* %6, i8* %4
132   %add.ptr.i = getelementptr inbounds i8, i8* %cond.i.i, i64 16
133   %7 = load i8, i8* %add.ptr.i, align 1, !tbaa !2
134   ret i8 %7
137 ; Function Attrs: argmemonly nounwind
138 declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #1
140 declare dso_local i32 @__gxx_personality_v0(...)
142 ; Function Attrs: argmemonly nounwind
143 declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #1
145 ; Function Attrs: argmemonly nounwind
146 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1 immarg) #1
148 ; Function Attrs: argmemonly nounwind
149 declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #1
151 attributes #0 = { norecurse uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
152 attributes #1 = { argmemonly nounwind }
153 attributes #2 = { noreturn nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
154 attributes #3 = { nobuiltin nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
155 attributes #4 = { nounwind }
156 attributes #5 = { noreturn nounwind }
157 attributes #6 = { builtin nounwind }
159 !llvm.module.flags = !{!0}
160 !llvm.ident = !{!1}
162 !0 = !{i32 1, !"wchar_size", i32 4}
163 !1 = !{!"clang version 9.0.0 (https://git.llvm.org/git/clang.git 6bb42abb270b5879a3acd289ca42341115a3cb46) (https://git.llvm.org/git/llvm.git ab39cf6afa9acdc108d16e7194a0d82619b044d6)"}
164 !2 = !{!3, !3, i64 0}
165 !3 = !{!"omnipotent char", !4, i64 0}
166 !4 = !{!"Simple C++ TBAA"}
167 !5 = !{!6, !6, i64 0}
168 !6 = !{!"any pointer", !3, i64 0}