brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.7 KiB · 71ad598 Raw
442 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s3 4%struct.i = type { i32, i24 }5%struct.m = type { %struct.i }6 7@a = local_unnamed_addr global i32 0, align 48@b = local_unnamed_addr global i16 0, align 29@c = local_unnamed_addr global i16 0, align 210@e = local_unnamed_addr global i16 0, align 211@l = local_unnamed_addr global %struct.i zeroinitializer, align 412@k = local_unnamed_addr global %struct.m zeroinitializer, align 413 14@x0 = local_unnamed_addr global double 0.000000e+00, align 815@x1 = local_unnamed_addr global i32 0, align 416@x2 = local_unnamed_addr global i32 0, align 417@x3 = local_unnamed_addr global i32 0, align 418@x4 = local_unnamed_addr global i32 0, align 419@x5 = local_unnamed_addr global ptr null, align 820 21; Check that compiler does not crash.22; Test for PR3077523define void @_Z1nv() local_unnamed_addr {24; CHECK-LABEL: _Z1nv:25; CHECK:       # %bb.0: # %entry26; CHECK-NEXT:    movq k@GOTPCREL(%rip), %rax27; CHECK-NEXT:    movl 4(%rax), %edx28; CHECK-NEXT:    movq c@GOTPCREL(%rip), %rax29; CHECK-NEXT:    movswl (%rax), %ecx30; CHECK-NEXT:    movq b@GOTPCREL(%rip), %rax31; CHECK-NEXT:    movswl (%rax), %edi32; CHECK-NEXT:    movq a@GOTPCREL(%rip), %rsi33; CHECK-NEXT:    movl (%rsi), %esi34; CHECK-NEXT:    movq l@GOTPCREL(%rip), %r835; CHECK-NEXT:    movl (%r8), %r8d36; CHECK-NEXT:    movl %r8d, %r9d37; CHECK-NEXT:    shll $7, %r9d38; CHECK-NEXT:    sarl $7, %r9d39; CHECK-NEXT:    negl %r9d40; CHECK-NEXT:    testl %esi, %esi41; CHECK-NEXT:    cmovel %esi, %r9d42; CHECK-NEXT:    movzwl %dx, %r10d43; CHECK-NEXT:    leal (%rcx,%r10,2), %ecx44; CHECK-NEXT:    addl %edi, %ecx45; CHECK-NEXT:    cmpl %r9d, %ecx46; CHECK-NEXT:    sete %dil47; CHECK-NEXT:    testl $33554431, %r8d # imm = 0x1FFFFFF48; CHECK-NEXT:    sete %r8b49; CHECK-NEXT:    orb %dil, %r8b50; CHECK-NEXT:    movzbl %r8b, %edi51; CHECK-NEXT:    movq e@GOTPCREL(%rip), %r852; CHECK-NEXT:    movw %di, (%r8)53; CHECK-NEXT:    notl %ecx54; CHECK-NEXT:    shrl $31, %ecx55; CHECK-NEXT:    addl %edx, %ecx56; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx57; CHECK-NEXT:    sarl %cl, %esi58; CHECK-NEXT:    movw %si, (%rax)59; CHECK-NEXT:    retq60entry:61  %bf.load = load i32, ptr getelementptr inbounds (%struct.m, ptr @k, i64 0, i32 0, i32 1), align 462  %0 = load i16, ptr @c, align 263  %conv = sext i16 %0 to i3264  %1 = load i16, ptr @b, align 265  %conv1 = sext i16 %1 to i3266  %2 = load i32, ptr @a, align 467  %tobool = icmp ne i32 %2, 068  %bf.load3 = load i32, ptr @l, align 469  %bf.shl = shl i32 %bf.load3, 770  %bf.ashr = ashr exact i32 %bf.shl, 771  %bf.clear = shl i32 %bf.load, 172  %factor = and i32 %bf.clear, 13107073  %add13 = add nsw i32 %factor, %conv74  %add15 = add nsw i32 %add13, %conv175  %bf.ashr.op = sub nsw i32 0, %bf.ashr76  %add28 = select i1 %tobool, i32 %bf.ashr.op, i32 077  %tobool29 = icmp eq i32 %add15, %add2878  %phitmp = icmp eq i32 %bf.ashr, 079  %.phitmp = or i1 %phitmp, %tobool2980  %conv37 = zext i1 %.phitmp to i1681  store i16 %conv37, ptr @e, align 282  %bf.clear39 = and i32 %bf.load, 6553583  %factor53 = shl nuw nsw i32 %bf.clear39, 184  %add46 = add nsw i32 %factor53, %conv85  %add48 = add nsw i32 %add46, %conv186  %add48.lobit = lshr i32 %add48, 3187  %add48.lobit.not = xor i32 %add48.lobit, 188  %add51 = add nuw nsw i32 %add48.lobit.not, %bf.clear3989  %shr = ashr i32 %2, %add5190  %conv52 = trunc i32 %shr to i1691  store i16 %conv52, ptr @b, align 292  ret void93}94 95; Test for PR3153696define void @_Z2x6v() local_unnamed_addr {97; CHECK-LABEL: _Z2x6v:98; CHECK:       # %bb.0: # %entry99; CHECK-NEXT:    movq x1@GOTPCREL(%rip), %rax100; CHECK-NEXT:    movl (%rax), %edx101; CHECK-NEXT:    andl $511, %edx # imm = 0x1FF102; CHECK-NEXT:    leaq 1(%rdx), %rax103; CHECK-NEXT:    movq x4@GOTPCREL(%rip), %rcx104; CHECK-NEXT:    movl %eax, (%rcx)105; CHECK-NEXT:    movq x3@GOTPCREL(%rip), %rcx106; CHECK-NEXT:    movl (%rcx), %ecx107; CHECK-NEXT:    testl %ecx, %ecx108; CHECK-NEXT:    je .LBB1_18109; CHECK-NEXT:  # %bb.1: # %for.cond1thread-pre-split.lr.ph110; CHECK-NEXT:    pushq %rbp111; CHECK-NEXT:    .cfi_def_cfa_offset 16112; CHECK-NEXT:    pushq %r15113; CHECK-NEXT:    .cfi_def_cfa_offset 24114; CHECK-NEXT:    pushq %r14115; CHECK-NEXT:    .cfi_def_cfa_offset 32116; CHECK-NEXT:    pushq %r13117; CHECK-NEXT:    .cfi_def_cfa_offset 40118; CHECK-NEXT:    pushq %r12119; CHECK-NEXT:    .cfi_def_cfa_offset 48120; CHECK-NEXT:    pushq %rbx121; CHECK-NEXT:    .cfi_def_cfa_offset 56122; CHECK-NEXT:    .cfi_offset %rbx, -56123; CHECK-NEXT:    .cfi_offset %r12, -48124; CHECK-NEXT:    .cfi_offset %r13, -40125; CHECK-NEXT:    .cfi_offset %r14, -32126; CHECK-NEXT:    .cfi_offset %r15, -24127; CHECK-NEXT:    .cfi_offset %rbp, -16128; CHECK-NEXT:    movq x5@GOTPCREL(%rip), %rsi129; CHECK-NEXT:    movq (%rsi), %rsi130; CHECK-NEXT:    movl %ecx, %edi131; CHECK-NEXT:    notl %edi132; CHECK-NEXT:    leaq 8(,%rdi,8), %rdi133; CHECK-NEXT:    imulq %rax, %rdi134; CHECK-NEXT:    addq %rsi, %rdi135; CHECK-NEXT:    movq x2@GOTPCREL(%rip), %r8136; CHECK-NEXT:    movl (%r8), %r9d137; CHECK-NEXT:    leal 8(,%rdx,8), %eax138; CHECK-NEXT:    movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill139; CHECK-NEXT:    leaq 32(%rsi), %rbx140; CHECK-NEXT:    leaq 8(,%rdx,8), %r14141; CHECK-NEXT:    xorl %r15d, %r15d142; CHECK-NEXT:    movq x0@GOTPCREL(%rip), %r12143; CHECK-NEXT:    movq %rsi, %r13144; CHECK-NEXT:    jmp .LBB1_2145; CHECK-NEXT:    .p2align 4146; CHECK-NEXT:  .LBB1_15: # %for.cond1.for.inc3_crit_edge147; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1148; CHECK-NEXT:    movl %r9d, (%r8)149; CHECK-NEXT:  .LBB1_16: # %for.inc3150; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1151; CHECK-NEXT:    addq %r14, %r13152; CHECK-NEXT:    incq %r15153; CHECK-NEXT:    addq %r14, %rbx154; CHECK-NEXT:    incl %ecx155; CHECK-NEXT:    je .LBB1_17156; CHECK-NEXT:  .LBB1_2: # %for.cond1thread-pre-split157; CHECK-NEXT:    # =>This Loop Header: Depth=1158; CHECK-NEXT:    # Child Loop BB1_12 Depth 2159; CHECK-NEXT:    # Child Loop BB1_14 Depth 2160; CHECK-NEXT:    testl %r9d, %r9d161; CHECK-NEXT:    jns .LBB1_16162; CHECK-NEXT:  # %bb.3: # %for.body2.preheader163; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1164; CHECK-NEXT:    movslq %r9d, %r9165; CHECK-NEXT:    testq %r9, %r9166; CHECK-NEXT:    movq $-1, %rbp167; CHECK-NEXT:    cmovnsq %r9, %rbp168; CHECK-NEXT:    subq %r9, %rbp169; CHECK-NEXT:    incq %rbp170; CHECK-NEXT:    cmpq $4, %rbp171; CHECK-NEXT:    jb .LBB1_14172; CHECK-NEXT:  # %bb.4: # %min.iters.checked173; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1174; CHECK-NEXT:    movq %rbp, %rdx175; CHECK-NEXT:    andq $-4, %rdx176; CHECK-NEXT:    je .LBB1_14177; CHECK-NEXT:  # %bb.5: # %vector.memcheck178; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1179; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload180; CHECK-NEXT:    imulq %r15, %rax181; CHECK-NEXT:    leaq (%rsi,%rax), %r11182; CHECK-NEXT:    leaq (%r11,%r9,8), %r10183; CHECK-NEXT:    testq %r9, %r9184; CHECK-NEXT:    movq $-1, %r11185; CHECK-NEXT:    cmovnsq %r9, %r11186; CHECK-NEXT:    cmpq %r12, %r10187; CHECK-NEXT:    jae .LBB1_7188; CHECK-NEXT:  # %bb.6: # %vector.memcheck189; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1190; CHECK-NEXT:    leaq 8(%rsi), %r10191; CHECK-NEXT:    addq %r10, %rax192; CHECK-NEXT:    leaq (%rax,%r11,8), %rax193; CHECK-NEXT:    cmpq %r12, %rax194; CHECK-NEXT:    ja .LBB1_14195; CHECK-NEXT:  .LBB1_7: # %vector.body.preheader196; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1197; CHECK-NEXT:    leaq -4(%rdx), %rax198; CHECK-NEXT:    btl $2, %eax199; CHECK-NEXT:    jb .LBB1_8200; CHECK-NEXT:  # %bb.9: # %vector.body.prol.preheader201; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1202; CHECK-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero203; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]204; CHECK-NEXT:    movdqu %xmm0, (%r13,%r9,8)205; CHECK-NEXT:    movdqu %xmm0, 16(%r13,%r9,8)206; CHECK-NEXT:    movl $4, %r11d207; CHECK-NEXT:    shrq $2, %rax208; CHECK-NEXT:    jne .LBB1_11209; CHECK-NEXT:    jmp .LBB1_13210; CHECK-NEXT:  .LBB1_8: # in Loop: Header=BB1_2 Depth=1211; CHECK-NEXT:    xorl %r11d, %r11d212; CHECK-NEXT:    shrq $2, %rax213; CHECK-NEXT:    je .LBB1_13214; CHECK-NEXT:  .LBB1_11: # %vector.body.preheader.new215; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1216; CHECK-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero217; CHECK-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]218; CHECK-NEXT:    movq %r11, %rax219; CHECK-NEXT:    subq %rdx, %rax220; CHECK-NEXT:    addq %r9, %r11221; CHECK-NEXT:    leaq (%rbx,%r11,8), %r11222; CHECK-NEXT:    .p2align 4223; CHECK-NEXT:  .LBB1_12: # %vector.body224; CHECK-NEXT:    # Parent Loop BB1_2 Depth=1225; CHECK-NEXT:    # => This Inner Loop Header: Depth=2226; CHECK-NEXT:    movdqu %xmm0, -32(%r11)227; CHECK-NEXT:    movdqu %xmm0, -16(%r11)228; CHECK-NEXT:    movdqu %xmm0, (%r11)229; CHECK-NEXT:    movdqu %xmm0, 16(%r11)230; CHECK-NEXT:    addq $64, %r11231; CHECK-NEXT:    addq $8, %rax232; CHECK-NEXT:    jne .LBB1_12233; CHECK-NEXT:  .LBB1_13: # %middle.block234; CHECK-NEXT:    # in Loop: Header=BB1_2 Depth=1235; CHECK-NEXT:    addq %rdx, %r9236; CHECK-NEXT:    cmpq %rdx, %rbp237; CHECK-NEXT:    je .LBB1_15238; CHECK-NEXT:    .p2align 4239; CHECK-NEXT:  .LBB1_14: # %for.body2240; CHECK-NEXT:    # Parent Loop BB1_2 Depth=1241; CHECK-NEXT:    # => This Inner Loop Header: Depth=2242; CHECK-NEXT:    movq (%r12), %rax243; CHECK-NEXT:    movq %rax, (%r13,%r9,8)244; CHECK-NEXT:    incq %r9245; CHECK-NEXT:    jl .LBB1_14246; CHECK-NEXT:    jmp .LBB1_15247; CHECK-NEXT:  .LBB1_17: # %for.cond.for.end5_crit_edge248; CHECK-NEXT:    movq x5@GOTPCREL(%rip), %rax249; CHECK-NEXT:    movq %rdi, (%rax)250; CHECK-NEXT:    movq x3@GOTPCREL(%rip), %rax251; CHECK-NEXT:    movl $0, (%rax)252; CHECK-NEXT:    popq %rbx253; CHECK-NEXT:    .cfi_def_cfa_offset 48254; CHECK-NEXT:    popq %r12255; CHECK-NEXT:    .cfi_def_cfa_offset 40256; CHECK-NEXT:    popq %r13257; CHECK-NEXT:    .cfi_def_cfa_offset 32258; CHECK-NEXT:    popq %r14259; CHECK-NEXT:    .cfi_def_cfa_offset 24260; CHECK-NEXT:    popq %r15261; CHECK-NEXT:    .cfi_def_cfa_offset 16262; CHECK-NEXT:    popq %rbp263; CHECK-NEXT:    .cfi_def_cfa_offset 8264; CHECK-NEXT:    .cfi_restore %rbx265; CHECK-NEXT:    .cfi_restore %r12266; CHECK-NEXT:    .cfi_restore %r13267; CHECK-NEXT:    .cfi_restore %r14268; CHECK-NEXT:    .cfi_restore %r15269; CHECK-NEXT:    .cfi_restore %rbp270; CHECK-NEXT:  .LBB1_18: # %for.end5271; CHECK-NEXT:    retq272entry:273  %0 = load i32, ptr @x1, align 4274  %and = and i32 %0, 511275  %add = add nuw nsw i32 %and, 1276  store i32 %add, ptr @x4, align 4277  %.pr = load i32, ptr @x3, align 4278  %tobool8 = icmp eq i32 %.pr, 0279  br i1 %tobool8, label %for.end5, label %for.cond1thread-pre-split.lr.ph280 281for.cond1thread-pre-split.lr.ph:                  ; preds = %entry282  %idx.ext13 = zext i32 %add to i64283  %x5.promoted = load ptr, ptr @x5, align 8284  %1 = xor i32 %.pr, -1285  %2 = zext i32 %1 to i64286  %3 = shl nuw nsw i64 %2, 3287  %4 = add nuw nsw i64 %3, 8288  %5 = mul nuw nsw i64 %4, %idx.ext13289  %uglygep = getelementptr i8, ptr %x5.promoted, i64 %5290  %.pr6.pre = load i32, ptr @x2, align 4291  %6 = shl nuw nsw i32 %and, 3292  %addconv = add nuw nsw i32 %6, 8293  %7 = zext i32 %addconv to i64294  %scevgep15 = getelementptr double, ptr %x5.promoted, i64 1295  br label %for.cond1thread-pre-split296 297for.cond1thread-pre-split:                        ; preds = %for.cond1thread-pre-split.lr.ph, %for.inc3298  %indvar = phi i64 [ 0, %for.cond1thread-pre-split.lr.ph ], [ %indvar.next, %for.inc3 ]299  %.pr6 = phi i32 [ %.pr6.pre, %for.cond1thread-pre-split.lr.ph ], [ %.pr611, %for.inc3 ]300  %8 = phi ptr [ %x5.promoted, %for.cond1thread-pre-split.lr.ph ], [ %add.ptr, %for.inc3 ]301  %9 = phi i32 [ %.pr, %for.cond1thread-pre-split.lr.ph ], [ %inc4, %for.inc3 ]302  %10 = mul i64 %7, %indvar303  %uglygep14 = getelementptr i8, ptr %x5.promoted, i64 %10304  %uglygep17 = getelementptr i8, ptr %scevgep15, i64 %10305  %cmp7 = icmp slt i32 %.pr6, 0306  br i1 %cmp7, label %for.body2.preheader, label %for.inc3307 308for.body2.preheader:                              ; preds = %for.cond1thread-pre-split309  %11 = sext i32 %.pr6 to i64310  %12 = sext i32 %.pr6 to i64311  %13 = icmp sgt i64 %12, -1312  %smax = select i1 %13, i64 %12, i64 -1313  %14 = add nsw i64 %smax, 1314  %15 = sub nsw i64 %14, %12315  %min.iters.check = icmp ult i64 %15, 4316  br i1 %min.iters.check, label %for.body2.preheader21, label %min.iters.checked317 318min.iters.checked:                                ; preds = %for.body2.preheader319  %n.vec = and i64 %15, -4320  %cmp.zero = icmp eq i64 %n.vec, 0321  br i1 %cmp.zero, label %for.body2.preheader21, label %vector.memcheck322 323vector.memcheck:                                  ; preds = %min.iters.checked324  %16 = shl nsw i64 %11, 3325  %scevgep = getelementptr i8, ptr %uglygep14, i64 %16326  %17 = icmp sgt i64 %11, -1327  %smax18 = select i1 %17, i64 %11, i64 -1328  %18 = shl nsw i64 %smax18, 3329  %scevgep19 = getelementptr i8, ptr %uglygep17, i64 %18330  %bound0 = icmp ult ptr %scevgep, @x0331  %bound1 = icmp ugt ptr %scevgep19, @x0332  %memcheck.conflict = and i1 %bound0, %bound1333  %ind.end = add nsw i64 %11, %n.vec334  br i1 %memcheck.conflict, label %for.body2.preheader21, label %vector.body.preheader335 336vector.body.preheader:                            ; preds = %vector.memcheck337  %19 = add nsw i64 %n.vec, -4338  %20 = lshr exact i64 %19, 2339  %21 = and i64 %20, 1340  %lcmp.mod = icmp eq i64 %21, 0341  br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.prol.loopexit.unr-lcssa342 343vector.body.prol.preheader:                       ; preds = %vector.body.preheader344  br label %vector.body.prol345 346vector.body.prol:                                 ; preds = %vector.body.prol.preheader347  %22 = load i64, ptr @x0, align 8348  %23 = insertelement <2 x i64> undef, i64 %22, i32 0349  %24 = shufflevector <2 x i64> %23, <2 x i64> undef, <2 x i32> zeroinitializer350  %25 = insertelement <2 x i64> undef, i64 %22, i32 0351  %26 = shufflevector <2 x i64> %25, <2 x i64> undef, <2 x i32> zeroinitializer352  %27 = getelementptr inbounds double, ptr %8, i64 %11353  store <2 x i64> %24, ptr %27, align 8354  %28 = getelementptr double, ptr %27, i64 2355  store <2 x i64> %26, ptr %28, align 8356  br label %vector.body.prol.loopexit.unr-lcssa357 358vector.body.prol.loopexit.unr-lcssa:              ; preds = %vector.body.preheader, %vector.body.prol359  %index.unr.ph = phi i64 [ 4, %vector.body.prol ], [ 0, %vector.body.preheader ]360  br label %vector.body.prol.loopexit361 362vector.body.prol.loopexit:                        ; preds = %vector.body.prol.loopexit.unr-lcssa363  %29 = icmp eq i64 %20, 0364  br i1 %29, label %middle.block, label %vector.body.preheader.new365 366vector.body.preheader.new:                        ; preds = %vector.body.prol.loopexit367  %30 = load i64, ptr @x0, align 8368  %31 = insertelement <2 x i64> undef, i64 %30, i32 0369  %32 = shufflevector <2 x i64> %31, <2 x i64> undef, <2 x i32> zeroinitializer370  %33 = insertelement <2 x i64> undef, i64 %30, i32 0371  %34 = shufflevector <2 x i64> %33, <2 x i64> undef, <2 x i32> zeroinitializer372  %35 = load i64, ptr @x0, align 8373  %36 = insertelement <2 x i64> undef, i64 %35, i32 0374  %37 = shufflevector <2 x i64> %36, <2 x i64> undef, <2 x i32> zeroinitializer375  %38 = insertelement <2 x i64> undef, i64 %35, i32 0376  %39 = shufflevector <2 x i64> %38, <2 x i64> undef, <2 x i32> zeroinitializer377  br label %vector.body378 379vector.body:                                      ; preds = %vector.body, %vector.body.preheader.new380  %index = phi i64 [ %index.unr.ph, %vector.body.preheader.new ], [ %index.next.1, %vector.body ]381  %40 = add i64 %11, %index382  %41 = getelementptr inbounds double, ptr %8, i64 %40383  store <2 x i64> %32, ptr %41, align 8384  %42 = getelementptr double, ptr %41, i64 2385  store <2 x i64> %34, ptr %42, align 8386  %index.next = add i64 %index, 4387  %43 = add i64 %11, %index.next388  %44 = getelementptr inbounds double, ptr %8, i64 %43389  store <2 x i64> %37, ptr %44, align 8390  %45 = getelementptr double, ptr %44, i64 2391  store <2 x i64> %39, ptr %45, align 8392  %index.next.1 = add i64 %index, 8393  %46 = icmp eq i64 %index.next.1, %n.vec394  br i1 %46, label %middle.block.unr-lcssa, label %vector.body395 396middle.block.unr-lcssa:                           ; preds = %vector.body397  br label %middle.block398 399middle.block:                                     ; preds = %vector.body.prol.loopexit, %middle.block.unr-lcssa400  %cmp.n = icmp eq i64 %15, %n.vec401  br i1 %cmp.n, label %for.cond1.for.inc3_crit_edge, label %for.body2.preheader21402 403for.body2.preheader21:                            ; preds = %middle.block, %vector.memcheck, %min.iters.checked, %for.body2.preheader404  %indvars.iv.ph = phi i64 [ %11, %vector.memcheck ], [ %11, %min.iters.checked ], [ %11, %for.body2.preheader ], [ %ind.end, %middle.block ]405  br label %for.body2406 407for.body2:                                        ; preds = %for.body2.preheader21, %for.body2408  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body2 ], [ %indvars.iv.ph, %for.body2.preheader21 ]409  %47 = load i64, ptr @x0, align 8410  %arrayidx = getelementptr inbounds double, ptr %8, i64 %indvars.iv411  store i64 %47, ptr %arrayidx, align 8412  %indvars.iv.next = add nsw i64 %indvars.iv, 1413  %cmp = icmp slt i64 %indvars.iv, -1414  br i1 %cmp, label %for.body2, label %for.cond1.for.inc3_crit_edge.loopexit415 416for.cond1.for.inc3_crit_edge.loopexit:            ; preds = %for.body2417  br label %for.cond1.for.inc3_crit_edge418 419for.cond1.for.inc3_crit_edge:                     ; preds = %for.cond1.for.inc3_crit_edge.loopexit, %middle.block420  %indvars.iv.next.lcssa = phi i64 [ %ind.end, %middle.block ], [ %indvars.iv.next, %for.cond1.for.inc3_crit_edge.loopexit ]421  %48 = trunc i64 %indvars.iv.next.lcssa to i32422  store i32 %48, ptr @x2, align 4423  br label %for.inc3424 425for.inc3:                                         ; preds = %for.cond1.for.inc3_crit_edge, %for.cond1thread-pre-split426  %.pr611 = phi i32 [ %48, %for.cond1.for.inc3_crit_edge ], [ %.pr6, %for.cond1thread-pre-split ]427  %inc4 = add nsw i32 %9, 1428  %add.ptr = getelementptr inbounds double, ptr %8, i64 %idx.ext13429  %tobool = icmp eq i32 %inc4, 0430  %indvar.next = add i64 %indvar, 1431  br i1 %tobool, label %for.cond.for.end5_crit_edge, label %for.cond1thread-pre-split432 433for.cond.for.end5_crit_edge:                      ; preds = %for.inc3434  store ptr %uglygep, ptr @x5, align 8435  store i32 0, ptr @x3, align 4436  br label %for.end5437 438for.end5:                                         ; preds = %for.cond.for.end5_crit_edge, %entry439  ret void440}441 442