276 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-unknown-linux-gnu | FileCheck %s --check-prefix=I3863; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=X86-644 5@result = dso_local global i32 0, align 46 7define dso_local i32 @skip(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="skip" {8; I386-LABEL: skip:9; I386: # %bb.0: # %entry10; I386-NEXT: movl {{[0-9]+}}(%esp), %eax11; I386-NEXT: retl12;13; X86-64-LABEL: skip:14; X86-64: # %bb.0: # %entry15; X86-64-NEXT: movl %edi, %eax16; X86-64-NEXT: retq17 18entry:19 ret i32 %x20}21 22define dso_local i32 @used_gpr_arg(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="used-gpr-arg" {23; I386-LABEL: used_gpr_arg:24; I386: # %bb.0: # %entry25; I386-NEXT: movl {{[0-9]+}}(%esp), %eax26; I386-NEXT: retl27;28; X86-64-LABEL: used_gpr_arg:29; X86-64: # %bb.0: # %entry30; X86-64-NEXT: movl %edi, %eax31; X86-64-NEXT: xorl %edi, %edi32; X86-64-NEXT: retq33 34entry:35 ret i32 %x36}37 38define dso_local i32 @used_gpr(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="used-gpr" {39; I386-LABEL: used_gpr:40; I386: # %bb.0: # %entry41; I386-NEXT: movl {{[0-9]+}}(%esp), %eax42; I386-NEXT: retl43;44; X86-64-LABEL: used_gpr:45; X86-64: # %bb.0: # %entry46; X86-64-NEXT: movl %edi, %eax47; X86-64-NEXT: xorl %edi, %edi48; X86-64-NEXT: retq49 50entry:51 ret i32 %x52}53 54define dso_local i32 @used_arg(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="used-arg" {55; I386-LABEL: used_arg:56; I386: # %bb.0: # %entry57; I386-NEXT: movl {{[0-9]+}}(%esp), %eax58; I386-NEXT: retl59;60; X86-64-LABEL: used_arg:61; X86-64: # %bb.0: # %entry62; X86-64-NEXT: movl %edi, %eax63; X86-64-NEXT: xorl %edi, %edi64; X86-64-NEXT: retq65 66entry:67 ret i32 %x68}69 70define dso_local i32 @used(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="used" {71; I386-LABEL: used:72; I386: # %bb.0: # %entry73; I386-NEXT: movl {{[0-9]+}}(%esp), %eax74; I386-NEXT: retl75;76; X86-64-LABEL: used:77; X86-64: # %bb.0: # %entry78; X86-64-NEXT: movl %edi, %eax79; X86-64-NEXT: xorl %edi, %edi80; X86-64-NEXT: retq81 82entry:83 ret i32 %x84}85 86define dso_local i32 @all_gpr_arg(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="all-gpr-arg" {87; I386-LABEL: all_gpr_arg:88; I386: # %bb.0: # %entry89; I386-NEXT: movl {{[0-9]+}}(%esp), %eax90; I386-NEXT: xorl %ecx, %ecx91; I386-NEXT: xorl %edx, %edx92; I386-NEXT: retl93;94; X86-64-LABEL: all_gpr_arg:95; X86-64: # %bb.0: # %entry96; X86-64-NEXT: movl %edi, %eax97; X86-64-NEXT: xorl %ecx, %ecx98; X86-64-NEXT: xorl %edi, %edi99; X86-64-NEXT: xorl %edx, %edx100; X86-64-NEXT: xorl %esi, %esi101; X86-64-NEXT: xorl %r8d, %r8d102; X86-64-NEXT: xorl %r9d, %r9d103; X86-64-NEXT: retq104 105entry:106 ret i32 %x107}108 109define dso_local i32 @all_gpr(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="all-gpr" {110; I386-LABEL: all_gpr:111; I386: # %bb.0: # %entry112; I386-NEXT: movl {{[0-9]+}}(%esp), %eax113; I386-NEXT: xorl %ecx, %ecx114; I386-NEXT: xorl %edx, %edx115; I386-NEXT: retl116;117; X86-64-LABEL: all_gpr:118; X86-64: # %bb.0: # %entry119; X86-64-NEXT: movl %edi, %eax120; X86-64-NEXT: xorl %ecx, %ecx121; X86-64-NEXT: xorl %edi, %edi122; X86-64-NEXT: xorl %edx, %edx123; X86-64-NEXT: xorl %esi, %esi124; X86-64-NEXT: xorl %r8d, %r8d125; X86-64-NEXT: xorl %r9d, %r9d126; X86-64-NEXT: xorl %r10d, %r10d127; X86-64-NEXT: xorl %r11d, %r11d128; X86-64-NEXT: retq129 130entry:131 ret i32 %x132}133 134define dso_local i32 @all_arg(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="all-arg" {135; I386-LABEL: all_arg:136; I386: # %bb.0: # %entry137; I386-NEXT: movl {{[0-9]+}}(%esp), %eax138; I386-NEXT: xorl %ecx, %ecx139; I386-NEXT: xorl %edx, %edx140; I386-NEXT: retl141;142; X86-64-LABEL: all_arg:143; X86-64: # %bb.0: # %entry144; X86-64-NEXT: movl %edi, %eax145; X86-64-NEXT: xorl %ecx, %ecx146; X86-64-NEXT: xorl %edi, %edi147; X86-64-NEXT: xorl %edx, %edx148; X86-64-NEXT: xorl %esi, %esi149; X86-64-NEXT: xorl %r8d, %r8d150; X86-64-NEXT: xorl %r9d, %r9d151; X86-64-NEXT: xorps %xmm0, %xmm0152; X86-64-NEXT: xorps %xmm1, %xmm1153; X86-64-NEXT: xorps %xmm2, %xmm2154; X86-64-NEXT: xorps %xmm3, %xmm3155; X86-64-NEXT: xorps %xmm4, %xmm4156; X86-64-NEXT: xorps %xmm5, %xmm5157; X86-64-NEXT: xorps %xmm6, %xmm6158; X86-64-NEXT: xorps %xmm7, %xmm7159; X86-64-NEXT: retq160 161entry:162 ret i32 %x163}164 165define dso_local i32 @all(i32 returned %x) local_unnamed_addr #0 "zero-call-used-regs"="all" {166; I386-LABEL: all:167; I386: # %bb.0: # %entry168; I386-NEXT: movl {{[0-9]+}}(%esp), %eax169; I386-NEXT: fldz170; I386-NEXT: fldz171; I386-NEXT: fldz172; I386-NEXT: fldz173; I386-NEXT: fldz174; I386-NEXT: fldz175; I386-NEXT: fldz176; I386-NEXT: fstp %st(0)177; I386-NEXT: fstp %st(0)178; I386-NEXT: fstp %st(0)179; I386-NEXT: fstp %st(0)180; I386-NEXT: fstp %st(0)181; I386-NEXT: fstp %st(0)182; I386-NEXT: fstp %st(0)183; I386-NEXT: xorl %ecx, %ecx184; I386-NEXT: xorl %edx, %edx185; I386-NEXT: xorps %xmm0, %xmm0186; I386-NEXT: xorps %xmm1, %xmm1187; I386-NEXT: xorps %xmm2, %xmm2188; I386-NEXT: xorps %xmm3, %xmm3189; I386-NEXT: xorps %xmm4, %xmm4190; I386-NEXT: xorps %xmm5, %xmm5191; I386-NEXT: xorps %xmm6, %xmm6192; I386-NEXT: xorps %xmm7, %xmm7193; I386-NEXT: retl194;195; X86-64-LABEL: all:196; X86-64: # %bb.0: # %entry197; X86-64-NEXT: movl %edi, %eax198; X86-64-NEXT: fldz199; X86-64-NEXT: fldz200; X86-64-NEXT: fldz201; X86-64-NEXT: fldz202; X86-64-NEXT: fldz203; X86-64-NEXT: fldz204; X86-64-NEXT: fldz205; X86-64-NEXT: fldz206; X86-64-NEXT: fstp %st(0)207; X86-64-NEXT: fstp %st(0)208; X86-64-NEXT: fstp %st(0)209; X86-64-NEXT: fstp %st(0)210; X86-64-NEXT: fstp %st(0)211; X86-64-NEXT: fstp %st(0)212; X86-64-NEXT: fstp %st(0)213; X86-64-NEXT: fstp %st(0)214; X86-64-NEXT: xorl %ecx, %ecx215; X86-64-NEXT: xorl %edi, %edi216; X86-64-NEXT: xorl %edx, %edx217; X86-64-NEXT: xorl %esi, %esi218; X86-64-NEXT: xorl %r8d, %r8d219; X86-64-NEXT: xorl %r9d, %r9d220; X86-64-NEXT: xorl %r10d, %r10d221; X86-64-NEXT: xorl %r11d, %r11d222; X86-64-NEXT: xorps %xmm0, %xmm0223; X86-64-NEXT: xorps %xmm1, %xmm1224; X86-64-NEXT: xorps %xmm2, %xmm2225; X86-64-NEXT: xorps %xmm3, %xmm3226; X86-64-NEXT: xorps %xmm4, %xmm4227; X86-64-NEXT: xorps %xmm5, %xmm5228; X86-64-NEXT: xorps %xmm6, %xmm6229; X86-64-NEXT: xorps %xmm7, %xmm7230; X86-64-NEXT: xorps %xmm8, %xmm8231; X86-64-NEXT: xorps %xmm9, %xmm9232; X86-64-NEXT: xorps %xmm10, %xmm10233; X86-64-NEXT: xorps %xmm11, %xmm11234; X86-64-NEXT: xorps %xmm12, %xmm12235; X86-64-NEXT: xorps %xmm13, %xmm13236; X86-64-NEXT: xorps %xmm14, %xmm14237; X86-64-NEXT: xorps %xmm15, %xmm15238; X86-64-NEXT: retq239 240entry:241 ret i32 %x242}243 244define dso_local void @tailcall(ptr %p) local_unnamed_addr #0 "zero-call-used-regs"="used-gpr" {245; I386-LABEL: tailcall:246; I386: # %bb.0:247; I386-NEXT: movl {{[0-9]+}}(%esp), %eax248; I386-NEXT: jmpl *(%eax) # TAILCALL249;250; X86-64-LABEL: tailcall:251; X86-64: # %bb.0:252; X86-64-NEXT: jmpq *(%rdi) # TAILCALL253 %c = load ptr, ptr %p254 tail call void %c()255 ret void256}257 258; Don't emit zeroing registers in "main" function.259define dso_local i32 @main() local_unnamed_addr #1 {260; I386-LABEL: main:261; I386: # %bb.0: # %entry262; I386-NEXT: xorl %eax, %eax263; I386-NEXT: retl264;265; X86-64-LABEL: main:266; X86-64: # %bb.0: # %entry267; X86-64-NEXT: xorl %eax, %eax268; X86-64-NEXT: retq269 270entry:271 ret i32 0272}273 274attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }275attributes #1 = { nofree norecurse nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }276