599 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp2; RUN: llc < %s -mtriple=x86_64-apple-darwin -code-model=large -relocation-model=static | FileCheck --check-prefix=CHECK-X64 %s3; RUN: llc < %s -mtriple=x86_64-linux-gnux32 | FileCheck --check-prefix=CHECK-X32 %s4 5@.str = internal constant [38 x i8] c"%d, %f, %d, %lld, %d, %f, %d, %d, %d\0A\00" ; <ptr> [#uses=1]6 7declare i32 @printf(ptr, ...) nounwind8 9declare void @llvm.va_start(ptr)10declare void @llvm.va_copy(ptr, ptr)11declare void @llvm.va_end(ptr)12 13%struct.va_list = type { i32, i32, ptr, ptr }14 15define void @func(...) nounwind {16; CHECK-X64-LABEL: func:17; CHECK-X64: ## %bb.0: ## %entry18; CHECK-X64-NEXT: pushq %rbx19; CHECK-X64-NEXT: subq $224, %rsp20; CHECK-X64-NEXT: testb %al, %al21; CHECK-X64-NEXT: je LBB0_4722; CHECK-X64-NEXT: ## %bb.46: ## %entry23; CHECK-X64-NEXT: movaps %xmm0, 96(%rsp)24; CHECK-X64-NEXT: movaps %xmm1, 112(%rsp)25; CHECK-X64-NEXT: movaps %xmm2, 128(%rsp)26; CHECK-X64-NEXT: movaps %xmm3, 144(%rsp)27; CHECK-X64-NEXT: movaps %xmm4, 160(%rsp)28; CHECK-X64-NEXT: movaps %xmm5, 176(%rsp)29; CHECK-X64-NEXT: movaps %xmm6, 192(%rsp)30; CHECK-X64-NEXT: movaps %xmm7, 208(%rsp)31; CHECK-X64-NEXT: LBB0_47: ## %entry32; CHECK-X64-NEXT: movq %rdi, 48(%rsp)33; CHECK-X64-NEXT: movq %rsi, 56(%rsp)34; CHECK-X64-NEXT: movq %rdx, 64(%rsp)35; CHECK-X64-NEXT: movq %rcx, 72(%rsp)36; CHECK-X64-NEXT: movq %r8, 80(%rsp)37; CHECK-X64-NEXT: movq %r9, 88(%rsp)38; CHECK-X64-NEXT: movabsq $206158430208, %rax ## imm = 0x300000000039; CHECK-X64-NEXT: movq %rax, (%rsp)40; CHECK-X64-NEXT: leaq 240(%rsp), %rax41; CHECK-X64-NEXT: movq %rax, 8(%rsp)42; CHECK-X64-NEXT: leaq 48(%rsp), %rax43; CHECK-X64-NEXT: movq %rax, 16(%rsp)44; CHECK-X64-NEXT: movl (%rsp), %ecx45; CHECK-X64-NEXT: cmpl $48, %ecx46; CHECK-X64-NEXT: jae LBB0_247; CHECK-X64-NEXT: ## %bb.1: ## %entry48; CHECK-X64-NEXT: movq 16(%rsp), %rax49; CHECK-X64-NEXT: addq %rcx, %rax50; CHECK-X64-NEXT: addl $8, %ecx51; CHECK-X64-NEXT: movl %ecx, (%rsp)52; CHECK-X64-NEXT: jmp LBB0_353; CHECK-X64-NEXT: LBB0_2: ## %entry54; CHECK-X64-NEXT: movq 8(%rsp), %rax55; CHECK-X64-NEXT: movq %rax, %rcx56; CHECK-X64-NEXT: addq $8, %rcx57; CHECK-X64-NEXT: movq %rcx, 8(%rsp)58; CHECK-X64-NEXT: LBB0_3: ## %entry59; CHECK-X64-NEXT: movl (%rax), %r10d60; CHECK-X64-NEXT: movl (%rsp), %ecx61; CHECK-X64-NEXT: cmpl $48, %ecx62; CHECK-X64-NEXT: jae LBB0_563; CHECK-X64-NEXT: ## %bb.4: ## %entry64; CHECK-X64-NEXT: movq 16(%rsp), %rax65; CHECK-X64-NEXT: addq %rcx, %rax66; CHECK-X64-NEXT: addl $8, %ecx67; CHECK-X64-NEXT: movl %ecx, (%rsp)68; CHECK-X64-NEXT: jmp LBB0_669; CHECK-X64-NEXT: LBB0_5: ## %entry70; CHECK-X64-NEXT: movq 8(%rsp), %rax71; CHECK-X64-NEXT: movq %rax, %rcx72; CHECK-X64-NEXT: addq $8, %rcx73; CHECK-X64-NEXT: movq %rcx, 8(%rsp)74; CHECK-X64-NEXT: LBB0_6: ## %entry75; CHECK-X64-NEXT: movl (%rax), %r11d76; CHECK-X64-NEXT: movl (%rsp), %ecx77; CHECK-X64-NEXT: cmpl $48, %ecx78; CHECK-X64-NEXT: jae LBB0_879; CHECK-X64-NEXT: ## %bb.7: ## %entry80; CHECK-X64-NEXT: movq 16(%rsp), %rax81; CHECK-X64-NEXT: addq %rcx, %rax82; CHECK-X64-NEXT: addl $8, %ecx83; CHECK-X64-NEXT: movl %ecx, (%rsp)84; CHECK-X64-NEXT: jmp LBB0_985; CHECK-X64-NEXT: LBB0_8: ## %entry86; CHECK-X64-NEXT: movq 8(%rsp), %rax87; CHECK-X64-NEXT: movq %rax, %rcx88; CHECK-X64-NEXT: addq $8, %rcx89; CHECK-X64-NEXT: movq %rcx, 8(%rsp)90; CHECK-X64-NEXT: LBB0_9: ## %entry91; CHECK-X64-NEXT: movl (%rax), %r9d92; CHECK-X64-NEXT: movq 16(%rsp), %rax93; CHECK-X64-NEXT: movq %rax, 40(%rsp)94; CHECK-X64-NEXT: movq (%rsp), %rax95; CHECK-X64-NEXT: movq 8(%rsp), %rcx96; CHECK-X64-NEXT: movq %rcx, 32(%rsp)97; CHECK-X64-NEXT: movq %rax, 24(%rsp)98; CHECK-X64-NEXT: movl 4(%rsp), %eax99; CHECK-X64-NEXT: cmpl $176, %eax100; CHECK-X64-NEXT: jae LBB0_11101; CHECK-X64-NEXT: ## %bb.10: ## %entry102; CHECK-X64-NEXT: addl $16, %eax103; CHECK-X64-NEXT: movl %eax, 4(%rsp)104; CHECK-X64-NEXT: jmp LBB0_12105; CHECK-X64-NEXT: LBB0_11: ## %entry106; CHECK-X64-NEXT: movq 8(%rsp), %rax107; CHECK-X64-NEXT: addq $8, %rax108; CHECK-X64-NEXT: movq %rax, 8(%rsp)109; CHECK-X64-NEXT: LBB0_12: ## %entry110; CHECK-X64-NEXT: movl 28(%rsp), %ecx111; CHECK-X64-NEXT: cmpl $176, %ecx112; CHECK-X64-NEXT: jae LBB0_14113; CHECK-X64-NEXT: ## %bb.13: ## %entry114; CHECK-X64-NEXT: movq 40(%rsp), %rax115; CHECK-X64-NEXT: addq %rcx, %rax116; CHECK-X64-NEXT: addl $16, %ecx117; CHECK-X64-NEXT: movl %ecx, 28(%rsp)118; CHECK-X64-NEXT: jmp LBB0_15119; CHECK-X64-NEXT: LBB0_14: ## %entry120; CHECK-X64-NEXT: movq 32(%rsp), %rax121; CHECK-X64-NEXT: movq %rax, %rcx122; CHECK-X64-NEXT: addq $8, %rcx123; CHECK-X64-NEXT: movq %rcx, 32(%rsp)124; CHECK-X64-NEXT: LBB0_15: ## %entry125; CHECK-X64-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero126; CHECK-X64-NEXT: movl (%rsp), %ecx127; CHECK-X64-NEXT: cmpl $48, %ecx128; CHECK-X64-NEXT: jae LBB0_17129; CHECK-X64-NEXT: ## %bb.16: ## %entry130; CHECK-X64-NEXT: movq 16(%rsp), %rax131; CHECK-X64-NEXT: addq %rcx, %rax132; CHECK-X64-NEXT: addl $8, %ecx133; CHECK-X64-NEXT: movl %ecx, (%rsp)134; CHECK-X64-NEXT: jmp LBB0_18135; CHECK-X64-NEXT: LBB0_17: ## %entry136; CHECK-X64-NEXT: movq 8(%rsp), %rax137; CHECK-X64-NEXT: movq %rax, %rcx138; CHECK-X64-NEXT: addq $8, %rcx139; CHECK-X64-NEXT: movq %rcx, 8(%rsp)140; CHECK-X64-NEXT: LBB0_18: ## %entry141; CHECK-X64-NEXT: movl (%rax), %r8d142; CHECK-X64-NEXT: movl 24(%rsp), %eax143; CHECK-X64-NEXT: cmpl $48, %eax144; CHECK-X64-NEXT: jae LBB0_20145; CHECK-X64-NEXT: ## %bb.19: ## %entry146; CHECK-X64-NEXT: addl $8, %eax147; CHECK-X64-NEXT: movl %eax, 24(%rsp)148; CHECK-X64-NEXT: jmp LBB0_21149; CHECK-X64-NEXT: LBB0_20: ## %entry150; CHECK-X64-NEXT: movq 32(%rsp), %rax151; CHECK-X64-NEXT: addq $8, %rax152; CHECK-X64-NEXT: movq %rax, 32(%rsp)153; CHECK-X64-NEXT: LBB0_21: ## %entry154; CHECK-X64-NEXT: movl (%rsp), %eax155; CHECK-X64-NEXT: cmpl $48, %eax156; CHECK-X64-NEXT: jae LBB0_23157; CHECK-X64-NEXT: ## %bb.22: ## %entry158; CHECK-X64-NEXT: addl $8, %eax159; CHECK-X64-NEXT: movl %eax, (%rsp)160; CHECK-X64-NEXT: jmp LBB0_24161; CHECK-X64-NEXT: LBB0_23: ## %entry162; CHECK-X64-NEXT: movq 8(%rsp), %rax163; CHECK-X64-NEXT: addq $8, %rax164; CHECK-X64-NEXT: movq %rax, 8(%rsp)165; CHECK-X64-NEXT: LBB0_24: ## %entry166; CHECK-X64-NEXT: movl 24(%rsp), %ecx167; CHECK-X64-NEXT: cmpl $48, %ecx168; CHECK-X64-NEXT: jae LBB0_26169; CHECK-X64-NEXT: ## %bb.25: ## %entry170; CHECK-X64-NEXT: movq 40(%rsp), %rax171; CHECK-X64-NEXT: addq %rcx, %rax172; CHECK-X64-NEXT: addl $8, %ecx173; CHECK-X64-NEXT: movl %ecx, 24(%rsp)174; CHECK-X64-NEXT: jmp LBB0_27175; CHECK-X64-NEXT: LBB0_26: ## %entry176; CHECK-X64-NEXT: movq 32(%rsp), %rax177; CHECK-X64-NEXT: movq %rax, %rcx178; CHECK-X64-NEXT: addq $8, %rcx179; CHECK-X64-NEXT: movq %rcx, 32(%rsp)180; CHECK-X64-NEXT: LBB0_27: ## %entry181; CHECK-X64-NEXT: movq (%rax), %rcx182; CHECK-X64-NEXT: movl (%rsp), %edx183; CHECK-X64-NEXT: cmpl $48, %edx184; CHECK-X64-NEXT: jae LBB0_29185; CHECK-X64-NEXT: ## %bb.28: ## %entry186; CHECK-X64-NEXT: movq 16(%rsp), %rax187; CHECK-X64-NEXT: addq %rdx, %rax188; CHECK-X64-NEXT: addl $8, %edx189; CHECK-X64-NEXT: movl %edx, (%rsp)190; CHECK-X64-NEXT: jmp LBB0_30191; CHECK-X64-NEXT: LBB0_29: ## %entry192; CHECK-X64-NEXT: movq 8(%rsp), %rax193; CHECK-X64-NEXT: movq %rax, %rdx194; CHECK-X64-NEXT: addq $8, %rdx195; CHECK-X64-NEXT: movq %rdx, 8(%rsp)196; CHECK-X64-NEXT: LBB0_30: ## %entry197; CHECK-X64-NEXT: movl (%rax), %edx198; CHECK-X64-NEXT: movl 24(%rsp), %eax199; CHECK-X64-NEXT: cmpl $48, %eax200; CHECK-X64-NEXT: jae LBB0_32201; CHECK-X64-NEXT: ## %bb.31: ## %entry202; CHECK-X64-NEXT: addl $8, %eax203; CHECK-X64-NEXT: movl %eax, 24(%rsp)204; CHECK-X64-NEXT: jmp LBB0_33205; CHECK-X64-NEXT: LBB0_32: ## %entry206; CHECK-X64-NEXT: movq 32(%rsp), %rax207; CHECK-X64-NEXT: addq $8, %rax208; CHECK-X64-NEXT: movq %rax, 32(%rsp)209; CHECK-X64-NEXT: LBB0_33: ## %entry210; CHECK-X64-NEXT: movl 4(%rsp), %eax211; CHECK-X64-NEXT: cmpl $176, %eax212; CHECK-X64-NEXT: jae LBB0_35213; CHECK-X64-NEXT: ## %bb.34: ## %entry214; CHECK-X64-NEXT: addl $16, %eax215; CHECK-X64-NEXT: movl %eax, 4(%rsp)216; CHECK-X64-NEXT: jmp LBB0_36217; CHECK-X64-NEXT: LBB0_35: ## %entry218; CHECK-X64-NEXT: movq 8(%rsp), %rax219; CHECK-X64-NEXT: addq $8, %rax220; CHECK-X64-NEXT: movq %rax, 8(%rsp)221; CHECK-X64-NEXT: LBB0_36: ## %entry222; CHECK-X64-NEXT: movl 28(%rsp), %esi223; CHECK-X64-NEXT: cmpl $176, %esi224; CHECK-X64-NEXT: jae LBB0_38225; CHECK-X64-NEXT: ## %bb.37: ## %entry226; CHECK-X64-NEXT: movq 40(%rsp), %rax227; CHECK-X64-NEXT: addq %rsi, %rax228; CHECK-X64-NEXT: addl $16, %esi229; CHECK-X64-NEXT: movl %esi, 28(%rsp)230; CHECK-X64-NEXT: jmp LBB0_39231; CHECK-X64-NEXT: LBB0_38: ## %entry232; CHECK-X64-NEXT: movq 32(%rsp), %rax233; CHECK-X64-NEXT: movq %rax, %rsi234; CHECK-X64-NEXT: addq $8, %rsi235; CHECK-X64-NEXT: movq %rsi, 32(%rsp)236; CHECK-X64-NEXT: LBB0_39: ## %entry237; CHECK-X64-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero238; CHECK-X64-NEXT: movl (%rsp), %esi239; CHECK-X64-NEXT: cmpl $48, %esi240; CHECK-X64-NEXT: jae LBB0_41241; CHECK-X64-NEXT: ## %bb.40: ## %entry242; CHECK-X64-NEXT: movq 16(%rsp), %rax243; CHECK-X64-NEXT: addq %rsi, %rax244; CHECK-X64-NEXT: addl $8, %esi245; CHECK-X64-NEXT: movl %esi, (%rsp)246; CHECK-X64-NEXT: jmp LBB0_42247; CHECK-X64-NEXT: LBB0_41: ## %entry248; CHECK-X64-NEXT: movq 8(%rsp), %rax249; CHECK-X64-NEXT: movq %rax, %rsi250; CHECK-X64-NEXT: addq $8, %rsi251; CHECK-X64-NEXT: movq %rsi, 8(%rsp)252; CHECK-X64-NEXT: LBB0_42: ## %entry253; CHECK-X64-NEXT: movl (%rax), %esi254; CHECK-X64-NEXT: movl 24(%rsp), %eax255; CHECK-X64-NEXT: cmpl $48, %eax256; CHECK-X64-NEXT: jae LBB0_44257; CHECK-X64-NEXT: ## %bb.43: ## %entry258; CHECK-X64-NEXT: addl $8, %eax259; CHECK-X64-NEXT: movl %eax, 24(%rsp)260; CHECK-X64-NEXT: jmp LBB0_45261; CHECK-X64-NEXT: LBB0_44: ## %entry262; CHECK-X64-NEXT: movq 32(%rsp), %rax263; CHECK-X64-NEXT: addq $8, %rax264; CHECK-X64-NEXT: movq %rax, 32(%rsp)265; CHECK-X64-NEXT: LBB0_45: ## %entry266; CHECK-X64-NEXT: movabsq $_.str, %rdi267; CHECK-X64-NEXT: movabsq $_printf, %rbx268; CHECK-X64-NEXT: movb $2, %al269; CHECK-X64-NEXT: pushq %r10270; CHECK-X64-NEXT: pushq %r11271; CHECK-X64-NEXT: callq *%rbx272; CHECK-X64-NEXT: addq $240, %rsp273; CHECK-X64-NEXT: popq %rbx274; CHECK-X64-NEXT: retq275;276; CHECK-X32-LABEL: func:277; CHECK-X32: # %bb.0: # %entry278; CHECK-X32-NEXT: subl $216, %esp279; CHECK-X32-NEXT: testb %al, %al280; CHECK-X32-NEXT: je .LBB0_47281; CHECK-X32-NEXT: # %bb.46: # %entry282; CHECK-X32-NEXT: movaps %xmm0, 80(%esp)283; CHECK-X32-NEXT: movaps %xmm1, 96(%esp)284; CHECK-X32-NEXT: movaps %xmm2, 112(%esp)285; CHECK-X32-NEXT: movaps %xmm3, 128(%esp)286; CHECK-X32-NEXT: movaps %xmm4, 144(%esp)287; CHECK-X32-NEXT: movaps %xmm5, 160(%esp)288; CHECK-X32-NEXT: movaps %xmm6, 176(%esp)289; CHECK-X32-NEXT: movaps %xmm7, 192(%esp)290; CHECK-X32-NEXT: .LBB0_47: # %entry291; CHECK-X32-NEXT: movq %rdi, 32(%esp)292; CHECK-X32-NEXT: movq %rsi, 40(%esp)293; CHECK-X32-NEXT: movq %rdx, 48(%esp)294; CHECK-X32-NEXT: movq %rcx, 56(%esp)295; CHECK-X32-NEXT: movq %r8, 64(%esp)296; CHECK-X32-NEXT: movq %r9, 72(%esp)297; CHECK-X32-NEXT: movabsq $206158430208, %rax # imm = 0x3000000000298; CHECK-X32-NEXT: movq %rax, (%esp)299; CHECK-X32-NEXT: leal 224(%rsp), %eax300; CHECK-X32-NEXT: movl %eax, 8(%esp)301; CHECK-X32-NEXT: leal 32(%rsp), %eax302; CHECK-X32-NEXT: movl %eax, 12(%esp)303; CHECK-X32-NEXT: movl (%esp), %ecx304; CHECK-X32-NEXT: cmpl $48, %ecx305; CHECK-X32-NEXT: jae .LBB0_2306; CHECK-X32-NEXT: # %bb.1: # %entry307; CHECK-X32-NEXT: movl 12(%esp), %eax308; CHECK-X32-NEXT: addl %ecx, %eax309; CHECK-X32-NEXT: addl $8, %ecx310; CHECK-X32-NEXT: movl %ecx, (%esp)311; CHECK-X32-NEXT: jmp .LBB0_3312; CHECK-X32-NEXT: .LBB0_2: # %entry313; CHECK-X32-NEXT: movl 8(%esp), %eax314; CHECK-X32-NEXT: movl %eax, %ecx315; CHECK-X32-NEXT: addl $8, %ecx316; CHECK-X32-NEXT: movl %ecx, 8(%esp)317; CHECK-X32-NEXT: .LBB0_3: # %entry318; CHECK-X32-NEXT: movl (%eax), %r10d319; CHECK-X32-NEXT: movl (%esp), %ecx320; CHECK-X32-NEXT: cmpl $48, %ecx321; CHECK-X32-NEXT: jae .LBB0_5322; CHECK-X32-NEXT: # %bb.4: # %entry323; CHECK-X32-NEXT: movl 12(%esp), %eax324; CHECK-X32-NEXT: addl %ecx, %eax325; CHECK-X32-NEXT: addl $8, %ecx326; CHECK-X32-NEXT: movl %ecx, (%esp)327; CHECK-X32-NEXT: jmp .LBB0_6328; CHECK-X32-NEXT: .LBB0_5: # %entry329; CHECK-X32-NEXT: movl 8(%esp), %eax330; CHECK-X32-NEXT: movl %eax, %ecx331; CHECK-X32-NEXT: addl $8, %ecx332; CHECK-X32-NEXT: movl %ecx, 8(%esp)333; CHECK-X32-NEXT: .LBB0_6: # %entry334; CHECK-X32-NEXT: movl (%eax), %r11d335; CHECK-X32-NEXT: movl (%esp), %ecx336; CHECK-X32-NEXT: cmpl $48, %ecx337; CHECK-X32-NEXT: jae .LBB0_8338; CHECK-X32-NEXT: # %bb.7: # %entry339; CHECK-X32-NEXT: movl 12(%esp), %eax340; CHECK-X32-NEXT: addl %ecx, %eax341; CHECK-X32-NEXT: addl $8, %ecx342; CHECK-X32-NEXT: movl %ecx, (%esp)343; CHECK-X32-NEXT: jmp .LBB0_9344; CHECK-X32-NEXT: .LBB0_8: # %entry345; CHECK-X32-NEXT: movl 8(%esp), %eax346; CHECK-X32-NEXT: movl %eax, %ecx347; CHECK-X32-NEXT: addl $8, %ecx348; CHECK-X32-NEXT: movl %ecx, 8(%esp)349; CHECK-X32-NEXT: .LBB0_9: # %entry350; CHECK-X32-NEXT: movl (%eax), %r9d351; CHECK-X32-NEXT: movq (%esp), %rax352; CHECK-X32-NEXT: movq 8(%esp), %rcx353; CHECK-X32-NEXT: movq %rcx, 24(%esp)354; CHECK-X32-NEXT: movq %rax, 16(%esp)355; CHECK-X32-NEXT: movl 4(%esp), %eax356; CHECK-X32-NEXT: cmpl $176, %eax357; CHECK-X32-NEXT: jae .LBB0_11358; CHECK-X32-NEXT: # %bb.10: # %entry359; CHECK-X32-NEXT: addl $16, %eax360; CHECK-X32-NEXT: movl %eax, 4(%esp)361; CHECK-X32-NEXT: jmp .LBB0_12362; CHECK-X32-NEXT: .LBB0_11: # %entry363; CHECK-X32-NEXT: movl 8(%esp), %eax364; CHECK-X32-NEXT: addl $8, %eax365; CHECK-X32-NEXT: movl %eax, 8(%esp)366; CHECK-X32-NEXT: .LBB0_12: # %entry367; CHECK-X32-NEXT: movl 20(%esp), %ecx368; CHECK-X32-NEXT: cmpl $176, %ecx369; CHECK-X32-NEXT: jae .LBB0_14370; CHECK-X32-NEXT: # %bb.13: # %entry371; CHECK-X32-NEXT: movl 28(%esp), %eax372; CHECK-X32-NEXT: addl %ecx, %eax373; CHECK-X32-NEXT: addl $16, %ecx374; CHECK-X32-NEXT: movl %ecx, 20(%esp)375; CHECK-X32-NEXT: jmp .LBB0_15376; CHECK-X32-NEXT: .LBB0_14: # %entry377; CHECK-X32-NEXT: movl 24(%esp), %eax378; CHECK-X32-NEXT: movl %eax, %ecx379; CHECK-X32-NEXT: addl $8, %ecx380; CHECK-X32-NEXT: movl %ecx, 24(%esp)381; CHECK-X32-NEXT: .LBB0_15: # %entry382; CHECK-X32-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero383; CHECK-X32-NEXT: movl (%esp), %ecx384; CHECK-X32-NEXT: cmpl $48, %ecx385; CHECK-X32-NEXT: jae .LBB0_17386; CHECK-X32-NEXT: # %bb.16: # %entry387; CHECK-X32-NEXT: movl 12(%esp), %eax388; CHECK-X32-NEXT: addl %ecx, %eax389; CHECK-X32-NEXT: addl $8, %ecx390; CHECK-X32-NEXT: movl %ecx, (%esp)391; CHECK-X32-NEXT: jmp .LBB0_18392; CHECK-X32-NEXT: .LBB0_17: # %entry393; CHECK-X32-NEXT: movl 8(%esp), %eax394; CHECK-X32-NEXT: movl %eax, %ecx395; CHECK-X32-NEXT: addl $8, %ecx396; CHECK-X32-NEXT: movl %ecx, 8(%esp)397; CHECK-X32-NEXT: .LBB0_18: # %entry398; CHECK-X32-NEXT: movl (%eax), %r8d399; CHECK-X32-NEXT: movl 16(%esp), %eax400; CHECK-X32-NEXT: cmpl $48, %eax401; CHECK-X32-NEXT: jae .LBB0_20402; CHECK-X32-NEXT: # %bb.19: # %entry403; CHECK-X32-NEXT: addl $8, %eax404; CHECK-X32-NEXT: movl %eax, 16(%esp)405; CHECK-X32-NEXT: jmp .LBB0_21406; CHECK-X32-NEXT: .LBB0_20: # %entry407; CHECK-X32-NEXT: movl 24(%esp), %eax408; CHECK-X32-NEXT: addl $8, %eax409; CHECK-X32-NEXT: movl %eax, 24(%esp)410; CHECK-X32-NEXT: .LBB0_21: # %entry411; CHECK-X32-NEXT: movl (%esp), %eax412; CHECK-X32-NEXT: cmpl $48, %eax413; CHECK-X32-NEXT: jae .LBB0_23414; CHECK-X32-NEXT: # %bb.22: # %entry415; CHECK-X32-NEXT: addl $8, %eax416; CHECK-X32-NEXT: movl %eax, (%esp)417; CHECK-X32-NEXT: jmp .LBB0_24418; CHECK-X32-NEXT: .LBB0_23: # %entry419; CHECK-X32-NEXT: movl 8(%esp), %eax420; CHECK-X32-NEXT: addl $8, %eax421; CHECK-X32-NEXT: movl %eax, 8(%esp)422; CHECK-X32-NEXT: .LBB0_24: # %entry423; CHECK-X32-NEXT: movl 16(%esp), %ecx424; CHECK-X32-NEXT: cmpl $48, %ecx425; CHECK-X32-NEXT: jae .LBB0_26426; CHECK-X32-NEXT: # %bb.25: # %entry427; CHECK-X32-NEXT: movl 28(%esp), %eax428; CHECK-X32-NEXT: addl %ecx, %eax429; CHECK-X32-NEXT: addl $8, %ecx430; CHECK-X32-NEXT: movl %ecx, 16(%esp)431; CHECK-X32-NEXT: jmp .LBB0_27432; CHECK-X32-NEXT: .LBB0_26: # %entry433; CHECK-X32-NEXT: movl 24(%esp), %eax434; CHECK-X32-NEXT: movl %eax, %ecx435; CHECK-X32-NEXT: addl $8, %ecx436; CHECK-X32-NEXT: movl %ecx, 24(%esp)437; CHECK-X32-NEXT: .LBB0_27: # %entry438; CHECK-X32-NEXT: movq (%eax), %rcx439; CHECK-X32-NEXT: movl (%esp), %edx440; CHECK-X32-NEXT: cmpl $48, %edx441; CHECK-X32-NEXT: jae .LBB0_29442; CHECK-X32-NEXT: # %bb.28: # %entry443; CHECK-X32-NEXT: movl 12(%esp), %eax444; CHECK-X32-NEXT: addl %edx, %eax445; CHECK-X32-NEXT: addl $8, %edx446; CHECK-X32-NEXT: movl %edx, (%esp)447; CHECK-X32-NEXT: jmp .LBB0_30448; CHECK-X32-NEXT: .LBB0_29: # %entry449; CHECK-X32-NEXT: movl 8(%esp), %eax450; CHECK-X32-NEXT: movl %eax, %edx451; CHECK-X32-NEXT: addl $8, %edx452; CHECK-X32-NEXT: movl %edx, 8(%esp)453; CHECK-X32-NEXT: .LBB0_30: # %entry454; CHECK-X32-NEXT: movl (%eax), %edx455; CHECK-X32-NEXT: movl 16(%esp), %eax456; CHECK-X32-NEXT: cmpl $48, %eax457; CHECK-X32-NEXT: jae .LBB0_32458; CHECK-X32-NEXT: # %bb.31: # %entry459; CHECK-X32-NEXT: addl $8, %eax460; CHECK-X32-NEXT: movl %eax, 16(%esp)461; CHECK-X32-NEXT: jmp .LBB0_33462; CHECK-X32-NEXT: .LBB0_32: # %entry463; CHECK-X32-NEXT: movl 24(%esp), %eax464; CHECK-X32-NEXT: addl $8, %eax465; CHECK-X32-NEXT: movl %eax, 24(%esp)466; CHECK-X32-NEXT: .LBB0_33: # %entry467; CHECK-X32-NEXT: movl 4(%esp), %eax468; CHECK-X32-NEXT: cmpl $176, %eax469; CHECK-X32-NEXT: jae .LBB0_35470; CHECK-X32-NEXT: # %bb.34: # %entry471; CHECK-X32-NEXT: addl $16, %eax472; CHECK-X32-NEXT: movl %eax, 4(%esp)473; CHECK-X32-NEXT: jmp .LBB0_36474; CHECK-X32-NEXT: .LBB0_35: # %entry475; CHECK-X32-NEXT: movl 8(%esp), %eax476; CHECK-X32-NEXT: addl $8, %eax477; CHECK-X32-NEXT: movl %eax, 8(%esp)478; CHECK-X32-NEXT: .LBB0_36: # %entry479; CHECK-X32-NEXT: movl 20(%esp), %esi480; CHECK-X32-NEXT: cmpl $176, %esi481; CHECK-X32-NEXT: jae .LBB0_38482; CHECK-X32-NEXT: # %bb.37: # %entry483; CHECK-X32-NEXT: movl 28(%esp), %eax484; CHECK-X32-NEXT: addl %esi, %eax485; CHECK-X32-NEXT: addl $16, %esi486; CHECK-X32-NEXT: movl %esi, 20(%esp)487; CHECK-X32-NEXT: jmp .LBB0_39488; CHECK-X32-NEXT: .LBB0_38: # %entry489; CHECK-X32-NEXT: movl 24(%esp), %eax490; CHECK-X32-NEXT: movl %eax, %esi491; CHECK-X32-NEXT: addl $8, %esi492; CHECK-X32-NEXT: movl %esi, 24(%esp)493; CHECK-X32-NEXT: .LBB0_39: # %entry494; CHECK-X32-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero495; CHECK-X32-NEXT: movl (%esp), %esi496; CHECK-X32-NEXT: cmpl $48, %esi497; CHECK-X32-NEXT: jae .LBB0_41498; CHECK-X32-NEXT: # %bb.40: # %entry499; CHECK-X32-NEXT: movl 12(%esp), %eax500; CHECK-X32-NEXT: addl %esi, %eax501; CHECK-X32-NEXT: addl $8, %esi502; CHECK-X32-NEXT: movl %esi, (%esp)503; CHECK-X32-NEXT: jmp .LBB0_42504; CHECK-X32-NEXT: .LBB0_41: # %entry505; CHECK-X32-NEXT: movl 8(%esp), %eax506; CHECK-X32-NEXT: movl %eax, %esi507; CHECK-X32-NEXT: addl $8, %esi508; CHECK-X32-NEXT: movl %esi, 8(%esp)509; CHECK-X32-NEXT: .LBB0_42: # %entry510; CHECK-X32-NEXT: movl (%eax), %esi511; CHECK-X32-NEXT: movl 16(%esp), %eax512; CHECK-X32-NEXT: cmpl $48, %eax513; CHECK-X32-NEXT: jae .LBB0_44514; CHECK-X32-NEXT: # %bb.43: # %entry515; CHECK-X32-NEXT: addl $8, %eax516; CHECK-X32-NEXT: movl %eax, 16(%esp)517; CHECK-X32-NEXT: jmp .LBB0_45518; CHECK-X32-NEXT: .LBB0_44: # %entry519; CHECK-X32-NEXT: movl 24(%esp), %eax520; CHECK-X32-NEXT: addl $8, %eax521; CHECK-X32-NEXT: movl %eax, 24(%esp)522; CHECK-X32-NEXT: .LBB0_45: # %entry523; CHECK-X32-NEXT: movl $.str, %edi524; CHECK-X32-NEXT: movb $2, %al525; CHECK-X32-NEXT: pushq %r10526; CHECK-X32-NEXT: pushq %r11527; CHECK-X32-NEXT: callq printf@PLT528; CHECK-X32-NEXT: addl $232, %esp529; CHECK-X32-NEXT: retq530entry:531 %ap1 = alloca %struct.va_list532 %ap2 = alloca %struct.va_list533 tail call void @llvm.va_start(ptr %ap1)534 %arg1 = va_arg ptr %ap1, i32535 %arg2 = va_arg ptr %ap1, i32536 %arg3 = va_arg ptr %ap1, i32537 tail call void @llvm.va_copy(ptr %ap2, ptr %ap1)538 %arg4.1 = va_arg ptr %ap1, double539 %arg4.2 = va_arg ptr %ap2, double540 %arg5.1 = va_arg ptr %ap1, i32541 %arg5.2 = va_arg ptr %ap2, i32542 %arg6.1 = va_arg ptr %ap1, i64543 %arg6.2 = va_arg ptr %ap2, i64544 %arg7.1 = va_arg ptr %ap1, i32545 %arg7.2 = va_arg ptr %ap2, i32546 %arg8.1 = va_arg ptr %ap1, double547 %arg8.2 = va_arg ptr %ap2, double548 %arg9.1 = va_arg ptr %ap1, i32549 %arg9.2 = va_arg ptr %ap2, i32550 %result = tail call i32 (ptr, ...) @printf (ptr @.str, i32 %arg9.1, double %arg8.2, i32 %arg7.1, i64 %arg6.2, i32 %arg5.1, double %arg4.2, i32 %arg3, i32 %arg2, i32 %arg1) nounwind551 tail call void @llvm.va_end(ptr %ap2)552 tail call void @llvm.va_end(ptr %ap1)553 ret void554}555 556define i32 @main() nounwind {557; CHECK-X64-LABEL: main:558; CHECK-X64: ## %bb.0: ## %entry559; CHECK-X64-NEXT: pushq %rax560; CHECK-X64-NEXT: movl $12, (%rsp)561; CHECK-X64-NEXT: movabsq $_func, %r10562; CHECK-X64-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}, %rax563; CHECK-X64-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero564; CHECK-X64-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}, %rax565; CHECK-X64-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero566; CHECK-X64-NEXT: movabsq $123456677890, %r8 ## imm = 0x1CBE976802567; CHECK-X64-NEXT: movl $1, %edi568; CHECK-X64-NEXT: movl $2, %esi569; CHECK-X64-NEXT: movl $3, %edx570; CHECK-X64-NEXT: movl $-10, %ecx571; CHECK-X64-NEXT: movl $120, %r9d572; CHECK-X64-NEXT: movb $2, %al573; CHECK-X64-NEXT: callq *%r10574; CHECK-X64-NEXT: xorl %eax, %eax575; CHECK-X64-NEXT: popq %rcx576; CHECK-X64-NEXT: retq577;578; CHECK-X32-LABEL: main:579; CHECK-X32: # %bb.0: # %entry580; CHECK-X32-NEXT: pushq %rax581; CHECK-X32-NEXT: movl $12, (%esp)582; CHECK-X32-NEXT: movsd {{.*#+}} xmm0 = [4.5E+15,0.0E+0]583; CHECK-X32-NEXT: movabsq $123456677890, %r8 # imm = 0x1CBE976802584; CHECK-X32-NEXT: movsd {{.*#+}} xmm1 = [1.2450000047683716E+0,0.0E+0]585; CHECK-X32-NEXT: movl $1, %edi586; CHECK-X32-NEXT: movl $2, %esi587; CHECK-X32-NEXT: movl $3, %edx588; CHECK-X32-NEXT: movl $-10, %ecx589; CHECK-X32-NEXT: movl $120, %r9d590; CHECK-X32-NEXT: movb $2, %al591; CHECK-X32-NEXT: callq func@PLT592; CHECK-X32-NEXT: xorl %eax, %eax593; CHECK-X32-NEXT: popq %rcx594; CHECK-X32-NEXT: retq595entry:596 tail call void (...) @func(i32 1, i32 2, i32 3, double 4.500000e+15, i32 -10, i64 123456677890, i32 120, double 0x3FF3EB8520000000, i32 12) nounwind597 ret i32 0598}599