235 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s3 4@.str2 = private unnamed_addr constant [7 x i8] c"memchr\00", align 15@.str3 = private unnamed_addr constant [11 x i8] c"bsd_memchr\00", align 16@str4 = private unnamed_addr constant [5 x i8] c"Bug!\00"7 8; Make sure at end of do.cond.i, we jump to do.body.i first to have a tighter9; inner loop.10define i32 @test_branches_order() uwtable ssp {11; CHECK-LABEL: test_branches_order:12; CHECK: ## %bb.0: ## %entry13; CHECK-NEXT: pushq %rbp14; CHECK-NEXT: .cfi_def_cfa_offset 1615; CHECK-NEXT: pushq %r1516; CHECK-NEXT: .cfi_def_cfa_offset 2417; CHECK-NEXT: pushq %r1418; CHECK-NEXT: .cfi_def_cfa_offset 3219; CHECK-NEXT: pushq %r1320; CHECK-NEXT: .cfi_def_cfa_offset 4021; CHECK-NEXT: pushq %r1222; CHECK-NEXT: .cfi_def_cfa_offset 4823; CHECK-NEXT: pushq %rbx24; CHECK-NEXT: .cfi_def_cfa_offset 5625; CHECK-NEXT: subq $1001016, %rsp ## imm = 0xF463826; CHECK-NEXT: .cfi_def_cfa_offset 100107227; CHECK-NEXT: .cfi_offset %rbx, -5628; CHECK-NEXT: .cfi_offset %r12, -4829; CHECK-NEXT: .cfi_offset %r13, -4030; CHECK-NEXT: .cfi_offset %r14, -3231; CHECK-NEXT: .cfi_offset %r15, -2432; CHECK-NEXT: .cfi_offset %rbp, -1633; CHECK-NEXT: movq ___stack_chk_guard@GOTPCREL(%rip), %rax34; CHECK-NEXT: movq (%rax), %rax35; CHECK-NEXT: movq %rax, {{[0-9]+}}(%rsp)36; CHECK-NEXT: xorl %ebx, %ebx37; CHECK-NEXT: leaq -{{[0-9]+}}(%rsp), %r1438; CHECK-NEXT: movq %rsp, %r1539; CHECK-NEXT: jmp LBB0_140; CHECK-NEXT: .p2align 441; CHECK-NEXT: LBB0_6: ## %for.inc942; CHECK-NEXT: ## in Loop: Header=BB0_1 Depth=143; CHECK-NEXT: incl %ebx44; CHECK-NEXT: LBB0_1: ## %for.cond45; CHECK-NEXT: ## =>This Loop Header: Depth=146; CHECK-NEXT: ## Child Loop BB0_3 Depth 247; CHECK-NEXT: cmpl $999, %ebx ## imm = 0x3E748; CHECK-NEXT: jg LBB0_749; CHECK-NEXT: ## %bb.2: ## %for.cond1.preheader50; CHECK-NEXT: ## in Loop: Header=BB0_1 Depth=151; CHECK-NEXT: movl $-1, %ebp52; CHECK-NEXT: movq %r15, %rdi53; CHECK-NEXT: movq %r14, %r1254; CHECK-NEXT: .p2align 455; CHECK-NEXT: LBB0_3: ## %for.cond156; CHECK-NEXT: ## Parent Loop BB0_1 Depth=157; CHECK-NEXT: ## => This Inner Loop Header: Depth=258; CHECK-NEXT: incl %ebp59; CHECK-NEXT: cmpl $999, %ebp ## imm = 0x3E760; CHECK-NEXT: jg LBB0_661; CHECK-NEXT: ## %bb.4: ## %for.body362; CHECK-NEXT: ## in Loop: Header=BB0_3 Depth=263; CHECK-NEXT: addq $1002, %r12 ## imm = 0x3EA64; CHECK-NEXT: leaq 1001(%rdi), %r1365; CHECK-NEXT: movl $1000, %edx ## imm = 0x3E866; CHECK-NEXT: movl $120, %esi67; CHECK-NEXT: callq _memchr68; CHECK-NEXT: cmpq %rax, %r1269; CHECK-NEXT: movq %r13, %rdi70; CHECK-NEXT: je LBB0_371; CHECK-NEXT: jmp LBB0_572; CHECK-NEXT: LBB0_7: ## %for.end1173; CHECK-NEXT: leaq L_.str2(%rip), %rdi74; CHECK-NEXT: callq _puts75; CHECK-NEXT: xorl %eax, %eax76; CHECK-NEXT: movq %rsp, %rcx77; CHECK-NEXT: jmp LBB0_878; CHECK-NEXT: .p2align 479; CHECK-NEXT: LBB0_15: ## %for.inc3880; CHECK-NEXT: ## in Loop: Header=BB0_8 Depth=181; CHECK-NEXT: incl %eax82; CHECK-NEXT: LBB0_8: ## %for.cond1483; CHECK-NEXT: ## =>This Loop Header: Depth=184; CHECK-NEXT: ## Child Loop BB0_10 Depth 285; CHECK-NEXT: ## Child Loop BB0_12 Depth 386; CHECK-NEXT: cmpl $999, %eax ## imm = 0x3E787; CHECK-NEXT: jg LBB0_1688; CHECK-NEXT: ## %bb.9: ## %for.cond18.preheader89; CHECK-NEXT: ## in Loop: Header=BB0_8 Depth=190; CHECK-NEXT: movq %rcx, %rdx91; CHECK-NEXT: xorl %esi, %esi92; CHECK-NEXT: xorl %edi, %edi93; CHECK-NEXT: jmp LBB0_1094; CHECK-NEXT: .p2align 495; CHECK-NEXT: LBB0_14: ## %exit96; CHECK-NEXT: ## in Loop: Header=BB0_10 Depth=297; CHECK-NEXT: addq %rsi, %r898; CHECK-NEXT: incq %rdi99; CHECK-NEXT: decq %rsi100; CHECK-NEXT: addq $1001, %rdx ## imm = 0x3E9101; CHECK-NEXT: cmpq $-1000, %r8 ## imm = 0xFC18102; CHECK-NEXT: jne LBB0_5103; CHECK-NEXT: LBB0_10: ## %for.cond18104; CHECK-NEXT: ## Parent Loop BB0_8 Depth=1105; CHECK-NEXT: ## => This Loop Header: Depth=2106; CHECK-NEXT: ## Child Loop BB0_12 Depth 3107; CHECK-NEXT: cmpl $999, %edi ## imm = 0x3E7108; CHECK-NEXT: jg LBB0_15109; CHECK-NEXT: ## %bb.11: ## %for.body20110; CHECK-NEXT: ## in Loop: Header=BB0_10 Depth=2111; CHECK-NEXT: movq $-1000, %r8 ## imm = 0xFC18112; CHECK-NEXT: .p2align 4113; CHECK-NEXT: LBB0_12: ## %do.body.i114; CHECK-NEXT: ## Parent Loop BB0_8 Depth=1115; CHECK-NEXT: ## Parent Loop BB0_10 Depth=2116; CHECK-NEXT: ## => This Inner Loop Header: Depth=3117; CHECK-NEXT: cmpb $120, 1000(%rdx,%r8)118; CHECK-NEXT: je LBB0_14119; CHECK-NEXT: ## %bb.13: ## %do.cond.i120; CHECK-NEXT: ## in Loop: Header=BB0_12 Depth=3121; CHECK-NEXT: incq %r8122; CHECK-NEXT: jne LBB0_12123; CHECK-NEXT: LBB0_5: ## %if.then124; CHECK-NEXT: leaq L_str4(%rip), %rdi125; CHECK-NEXT: callq _puts126; CHECK-NEXT: movl $1, %edi127; CHECK-NEXT: callq _exit128; CHECK-NEXT: LBB0_16: ## %for.end40129; CHECK-NEXT: leaq L_.str3(%rip), %rdi130; CHECK-NEXT: callq _puts131; CHECK-NEXT: movq ___stack_chk_guard@GOTPCREL(%rip), %rax132; CHECK-NEXT: movq (%rax), %rax133; CHECK-NEXT: cmpq {{[0-9]+}}(%rsp), %rax134; CHECK-NEXT: jne LBB0_18135; CHECK-NEXT: ## %bb.17: ## %for.end40136; CHECK-NEXT: xorl %eax, %eax137; CHECK-NEXT: addq $1001016, %rsp ## imm = 0xF4638138; CHECK-NEXT: popq %rbx139; CHECK-NEXT: popq %r12140; CHECK-NEXT: popq %r13141; CHECK-NEXT: popq %r14142; CHECK-NEXT: popq %r15143; CHECK-NEXT: popq %rbp144; CHECK-NEXT: retq145; CHECK-NEXT: LBB0_18: ## %for.end40146; CHECK-NEXT: callq ___stack_chk_fail147entry:148 %strs = alloca [1000 x [1001 x i8]], align 16149 br label %for.cond150 151for.cond:152 %j.0 = phi i32 [ 0, %entry ], [ %inc10, %for.inc9 ]153 %cmp = icmp slt i32 %j.0, 1000154 br i1 %cmp, label %for.cond1, label %for.end11155 156for.cond1:157 %indvars.iv50 = phi i64 [ %indvars.iv.next51, %for.body3 ], [ 0, %for.cond ]158 %0 = trunc i64 %indvars.iv50 to i32159 %cmp2 = icmp slt i32 %0, 1000160 br i1 %cmp2, label %for.body3, label %for.inc9161 162for.body3:163 %arraydecay = getelementptr inbounds [1000 x [1001 x i8]], ptr %strs, i64 0, i64 %indvars.iv50, i64 0164 %call = call ptr @memchr(ptr %arraydecay, i32 120, i64 1000)165 %add.ptr = getelementptr inbounds [1000 x [1001 x i8]], ptr %strs, i64 0, i64 %indvars.iv50, i64 %indvars.iv50166 %cmp7 = icmp eq ptr %call, %add.ptr167 %indvars.iv.next51 = add i64 %indvars.iv50, 1168 br i1 %cmp7, label %for.cond1, label %if.then169 170if.then:171 %puts = call i32 @puts(ptr @str4)172 call void @exit(i32 1) noreturn173 unreachable174 175for.inc9:176 %inc10 = add nsw i32 %j.0, 1177 br label %for.cond178 179for.end11:180 %puts42 = call i32 @puts(ptr @.str2)181 br label %for.cond14182 183for.cond14:184 %j13.0 = phi i32 [ 0, %for.end11 ], [ %inc39, %for.inc38 ]185 %cmp15 = icmp slt i32 %j13.0, 1000186 br i1 %cmp15, label %for.cond18, label %for.end40187 188for.cond18:189 %indvars.iv = phi i64 [ %indvars.iv.next, %exit ], [ 0, %for.cond14 ]190 %1 = trunc i64 %indvars.iv to i32191 %cmp19 = icmp slt i32 %1, 1000192 br i1 %cmp19, label %for.body20, label %for.inc38193 194for.body20:195 %arraydecay24 = getelementptr inbounds [1000 x [1001 x i8]], ptr %strs, i64 0, i64 %indvars.iv, i64 0196 br label %do.body.i197 198do.body.i:199 %n.addr.0.i = phi i64 [ %dec.i, %do.cond.i ], [ 1000, %for.body20 ]200 %p.0.i = phi ptr [ %incdec.ptr.i, %do.cond.i ], [ %arraydecay24, %for.body20 ]201 %2 = load i8, ptr %p.0.i, align 1202 %cmp3.i = icmp eq i8 %2, 120203 br i1 %cmp3.i, label %exit, label %do.cond.i204 205do.cond.i:206 %incdec.ptr.i = getelementptr inbounds i8, ptr %p.0.i, i64 1207 %dec.i = add i64 %n.addr.0.i, -1208 %cmp5.i = icmp eq i64 %dec.i, 0209 br i1 %cmp5.i, label %if.then32, label %do.body.i210 211exit:212 %add.ptr30 = getelementptr inbounds [1000 x [1001 x i8]], ptr %strs, i64 0, i64 %indvars.iv, i64 %indvars.iv213 %cmp31 = icmp eq ptr %p.0.i, %add.ptr30214 %indvars.iv.next = add i64 %indvars.iv, 1215 br i1 %cmp31, label %for.cond18, label %if.then32216 217if.then32:218 %puts43 = call i32 @puts(ptr @str4)219 call void @exit(i32 1) noreturn220 unreachable221 222for.inc38:223 %inc39 = add nsw i32 %j13.0, 1224 br label %for.cond14225 226for.end40:227 %puts44 = call i32 @puts(ptr @.str3)228 ret i32 0229}230 231declare ptr @memchr(ptr, i32, i64) nounwind readonly232declare void @exit(i32) noreturn233declare i32 @puts(ptr nocapture) nounwind234 235