brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.1 KiB · 98c8f58 Raw
296 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc < %s | FileCheck %s3 4; Check that the SCEVs produced from the multiple loops don't attempt to get5; combines in invalid ways. The LSR filtering could attempt to combine addrecs6; from different loops.7 8target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"9target triple = "x86_64-unknown-linux-gnu"10 11define void @in4dob_(ptr nocapture writeonly %0, ptr nocapture readonly %1, ptr nocapture readonly %2, i64 %3, i1 %min.iters.check840) "target-cpu"="icelake-server" {12; CHECK-LABEL: in4dob_:13; CHECK:       # %bb.0: # %.preheader26314; CHECK-NEXT:    leaq (,%rcx,4), %r915; CHECK-NEXT:    movl $1, %r10d16; CHECK-NEXT:    xorl %eax, %eax17; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm018; CHECK-NEXT:    jmp .LBB0_119; CHECK-NEXT:    .p2align 420; CHECK-NEXT:  .LBB0_20: # in Loop: Header=BB0_1 Depth=121; CHECK-NEXT:    incq %r1022; CHECK-NEXT:    addq %r9, %rax23; CHECK-NEXT:    cmpq %r10, %rcx24; CHECK-NEXT:    je .LBB0_1825; CHECK-NEXT:  .LBB0_1: # =>This Inner Loop Header: Depth=126; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero27; CHECK-NEXT:    vucomiss %xmm0, %xmm128; CHECK-NEXT:    jne .LBB0_2029; CHECK-NEXT:    jp .LBB0_2030; CHECK-NEXT:  # %bb.2: # in Loop: Header=BB0_1 Depth=131; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero32; CHECK-NEXT:    vucomiss %xmm0, %xmm133; CHECK-NEXT:    jne .LBB0_2034; CHECK-NEXT:    jp .LBB0_2035; CHECK-NEXT:  # %bb.3: # %vector.body807.preheader36; CHECK-NEXT:    leaq 1(%rcx), %rdx37; CHECK-NEXT:    movl %edx, %esi38; CHECK-NEXT:    andl $7, %esi39; CHECK-NEXT:    cmpq $7, %rcx40; CHECK-NEXT:    jae .LBB0_541; CHECK-NEXT:  # %bb.4:42; CHECK-NEXT:    xorl %r9d, %r9d43; CHECK-NEXT:    jmp .LBB0_744; CHECK-NEXT:  .LBB0_5: # %vector.body807.preheader.new45; CHECK-NEXT:    movq %rdx, %r1046; CHECK-NEXT:    andq $-8, %r1047; CHECK-NEXT:    xorl %r9d, %r9d48; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm049; CHECK-NEXT:    .p2align 450; CHECK-NEXT:  .LBB0_6: # %vector.body80751; CHECK-NEXT:    # =>This Inner Loop Header: Depth=152; CHECK-NEXT:    leaq (%rdi,%r9), %r1153; CHECK-NEXT:    vmovups %ymm0, (%rax,%r11)54; CHECK-NEXT:    vmovups %ymm0, 1(%rax,%r11)55; CHECK-NEXT:    vmovups %ymm0, 2(%rax,%r11)56; CHECK-NEXT:    vmovups %ymm0, 3(%rax,%r11)57; CHECK-NEXT:    vmovups %ymm0, 4(%rax,%r11)58; CHECK-NEXT:    vmovups %ymm0, 5(%rax,%r11)59; CHECK-NEXT:    vmovups %ymm0, 6(%rax,%r11)60; CHECK-NEXT:    vmovups %ymm0, 7(%rax,%r11)61; CHECK-NEXT:    addq $8, %r962; CHECK-NEXT:    cmpq %r9, %r1063; CHECK-NEXT:    jne .LBB0_664; CHECK-NEXT:  .LBB0_7: # %.lr.ph373.unr-lcssa65; CHECK-NEXT:    testq %rsi, %rsi66; CHECK-NEXT:    je .LBB0_1067; CHECK-NEXT:  # %bb.8: # %vector.body807.epil.preheader68; CHECK-NEXT:    addq %rdi, %r969; CHECK-NEXT:    xorl %r10d, %r10d70; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm071; CHECK-NEXT:    .p2align 472; CHECK-NEXT:  .LBB0_9: # %vector.body807.epil73; CHECK-NEXT:    # =>This Inner Loop Header: Depth=174; CHECK-NEXT:    leaq (%r9,%r10), %r1175; CHECK-NEXT:    vmovups %ymm0, (%rax,%r11)76; CHECK-NEXT:    incq %r1077; CHECK-NEXT:    cmpq %r10, %rsi78; CHECK-NEXT:    jne .LBB0_979; CHECK-NEXT:  .LBB0_10: # %.lr.ph37380; CHECK-NEXT:    testb $1, %r8b81; CHECK-NEXT:    je .LBB0_1182; CHECK-NEXT:  # %bb.19: # %scalar.ph839.preheader83; CHECK-NEXT:    movl $0, (%rdi)84; CHECK-NEXT:    vzeroupper85; CHECK-NEXT:    retq86; CHECK-NEXT:  .LBB0_11: # %vector.body847.preheader87; CHECK-NEXT:    movl %edx, %esi88; CHECK-NEXT:    andl $7, %esi89; CHECK-NEXT:    cmpq $7, %rcx90; CHECK-NEXT:    jae .LBB0_1391; CHECK-NEXT:  # %bb.12:92; CHECK-NEXT:    xorl %ecx, %ecx93; CHECK-NEXT:    jmp .LBB0_1594; CHECK-NEXT:  .LBB0_13: # %vector.body847.preheader.new95; CHECK-NEXT:    andq $-8, %rdx96; CHECK-NEXT:    xorl %ecx, %ecx97; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm098; CHECK-NEXT:    .p2align 499; CHECK-NEXT:  .LBB0_14: # %vector.body847100; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1101; CHECK-NEXT:    leaq (%rdi,%rcx), %r8102; CHECK-NEXT:    vmovups %ymm0, 96(%rax,%r8)103; CHECK-NEXT:    vmovups %ymm0, 97(%rax,%r8)104; CHECK-NEXT:    vmovups %ymm0, 98(%rax,%r8)105; CHECK-NEXT:    vmovups %ymm0, 99(%rax,%r8)106; CHECK-NEXT:    vmovups %ymm0, 100(%rax,%r8)107; CHECK-NEXT:    vmovups %ymm0, 101(%rax,%r8)108; CHECK-NEXT:    vmovups %ymm0, 102(%rax,%r8)109; CHECK-NEXT:    vmovups %ymm0, 103(%rax,%r8)110; CHECK-NEXT:    addq $8, %rcx111; CHECK-NEXT:    cmpq %rcx, %rdx112; CHECK-NEXT:    jne .LBB0_14113; CHECK-NEXT:  .LBB0_15: # %common.ret.loopexit.unr-lcssa114; CHECK-NEXT:    testq %rsi, %rsi115; CHECK-NEXT:    je .LBB0_18116; CHECK-NEXT:  # %bb.16: # %vector.body847.epil.preheader117; CHECK-NEXT:    leaq 96(%rcx,%rdi), %rcx118; CHECK-NEXT:    xorl %edx, %edx119; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0120; CHECK-NEXT:    .p2align 4121; CHECK-NEXT:  .LBB0_17: # %vector.body847.epil122; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1123; CHECK-NEXT:    leaq (%rcx,%rdx), %rdi124; CHECK-NEXT:    vmovups %ymm0, (%rax,%rdi)125; CHECK-NEXT:    incq %rdx126; CHECK-NEXT:    cmpq %rdx, %rsi127; CHECK-NEXT:    jne .LBB0_17128; CHECK-NEXT:  .LBB0_18: # %common.ret129; CHECK-NEXT:    vzeroupper130; CHECK-NEXT:    retq131.preheader263:132  %4 = shl i64 %3, 2133  br label %5134 1355:                                                ; preds = %16, %.preheader263136  %lsr.iv1135 = phi ptr [ %0, %.preheader263 ], [ %uglygep1136, %16 ]137  %indvars.iv487 = phi i64 [ 1, %.preheader263 ], [ %indvars.iv.next488, %16 ]138  %6 = getelementptr float, ptr %1, i64 %indvars.iv487139  %7 = load float, ptr %6, align 4140  %8 = fcmp oeq float %7, 0.000000e+00141  %9 = getelementptr float, ptr %2, i64 %indvars.iv487142  %10 = load float, ptr %9, align 4143  %11 = fcmp oeq float %10, 0.000000e+00144  %12 = and i1 %8, %11145  br i1 %12, label %vector.body807.preheader, label %16146 147vector.body807.preheader:                         ; preds = %5148  %13 = add i64 %3, 1149  %xtraiter = and i64 %13, 7150  %14 = icmp ult i64 %3, 7151  br i1 %14, label %.lr.ph373.unr-lcssa, label %vector.body807.preheader.new152 153vector.body807.preheader.new:                     ; preds = %vector.body807.preheader154  %unroll_iter = and i64 %13, -8155  br label %vector.body807156 157vector.body807:                                   ; preds = %vector.body807, %vector.body807.preheader.new158  %lsr.iv1194 = phi i64 [ 0, %vector.body807.preheader.new ], [ %lsr.iv.next1195.7, %vector.body807 ]159  %niter = phi i64 [ 0, %vector.body807.preheader.new ], [ %niter.next.7, %vector.body807 ]160  %uglygep1197 = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv1194161  store <8 x float> zeroinitializer, ptr %uglygep1197, align 4162  %lsr.iv.next1195 = or disjoint i64 %lsr.iv1194, 1163  %uglygep1197.1 = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv.next1195164  store <8 x float> zeroinitializer, ptr %uglygep1197.1, align 4165  %lsr.iv.next1195.1 = or disjoint i64 %lsr.iv1194, 2166  %uglygep1197.2 = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv.next1195.1167  store <8 x float> zeroinitializer, ptr %uglygep1197.2, align 4168  %lsr.iv.next1195.2 = or disjoint i64 %lsr.iv1194, 3169  %uglygep1197.3 = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv.next1195.2170  store <8 x float> zeroinitializer, ptr %uglygep1197.3, align 4171  %lsr.iv.next1195.3 = or disjoint i64 %lsr.iv1194, 4172  %uglygep1197.4 = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv.next1195.3173  store <8 x float> zeroinitializer, ptr %uglygep1197.4, align 4174  %lsr.iv.next1195.4 = or disjoint i64 %lsr.iv1194, 5175  %uglygep1197.5 = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv.next1195.4176  store <8 x float> zeroinitializer, ptr %uglygep1197.5, align 4177  %lsr.iv.next1195.5 = or disjoint i64 %lsr.iv1194, 6178  %uglygep1197.6 = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv.next1195.5179  store <8 x float> zeroinitializer, ptr %uglygep1197.6, align 4180  %lsr.iv.next1195.6 = or disjoint i64 %lsr.iv1194, 7181  %uglygep1197.7 = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv.next1195.6182  store <8 x float> zeroinitializer, ptr %uglygep1197.7, align 4183  %lsr.iv.next1195.7 = add i64 %lsr.iv1194, 8184  %niter.next.7 = add i64 %niter, 8185  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter186  br i1 %niter.ncmp.7, label %.lr.ph373.unr-lcssa.loopexit, label %vector.body807187 188.lr.ph373.unr-lcssa.loopexit:                     ; preds = %vector.body807189  br label %.lr.ph373.unr-lcssa190 191.lr.ph373.unr-lcssa:                              ; preds = %.lr.ph373.unr-lcssa.loopexit, %vector.body807.preheader192  %lsr.iv1194.unr = phi i64 [ 0, %vector.body807.preheader ], [ %lsr.iv.next1195.7, %.lr.ph373.unr-lcssa.loopexit ]193  %lcmp.mod.not = icmp eq i64 %xtraiter, 0194  br i1 %lcmp.mod.not, label %.lr.ph373, label %vector.body807.epil.preheader195 196vector.body807.epil.preheader:                    ; preds = %.lr.ph373.unr-lcssa197  br label %vector.body807.epil198 199vector.body807.epil:                              ; preds = %vector.body807.epil.preheader, %vector.body807.epil200  %lsr.iv1194.epil = phi i64 [ %lsr.iv.next1195.epil, %vector.body807.epil ], [ %lsr.iv1194.unr, %vector.body807.epil.preheader ]201  %epil.iter = phi i64 [ %epil.iter.next, %vector.body807.epil ], [ 0, %vector.body807.epil.preheader ]202  %uglygep1197.epil = getelementptr i8, ptr %lsr.iv1135, i64 %lsr.iv1194.epil203  store <8 x float> zeroinitializer, ptr %uglygep1197.epil, align 4204  %lsr.iv.next1195.epil = add i64 %lsr.iv1194.epil, 1205  %epil.iter.next = add i64 %epil.iter, 1206  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter207  br i1 %epil.iter.cmp.not, label %.lr.ph373.loopexit, label %vector.body807.epil208 209.lr.ph373.loopexit:                               ; preds = %vector.body807.epil210  br label %.lr.ph373211 212.lr.ph373:                                        ; preds = %.lr.ph373.loopexit, %.lr.ph373.unr-lcssa213  br i1 %min.iters.check840, label %scalar.ph839.preheader, label %vector.body847.preheader214 215vector.body847.preheader:                         ; preds = %.lr.ph373216  %uglygep11551 = getelementptr i8, ptr %lsr.iv1135, i64 96217  %xtraiter12 = and i64 %13, 7218  %15 = icmp ult i64 %3, 7219  br i1 %15, label %common.ret.loopexit.unr-lcssa, label %vector.body847.preheader.new220 221vector.body847.preheader.new:                     ; preds = %vector.body847.preheader222  %unroll_iter15 = and i64 %13, -8223  br label %vector.body847224 225vector.body847:                                   ; preds = %vector.body847, %vector.body847.preheader.new226  %lsr.iv1152 = phi i64 [ 0, %vector.body847.preheader.new ], [ %lsr.iv.next1153.7, %vector.body847 ]227  %niter16 = phi i64 [ 0, %vector.body847.preheader.new ], [ %niter16.next.7, %vector.body847 ]228  %uglygep1156 = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv1152229  store <8 x float> zeroinitializer, ptr %uglygep1156, align 4230  %lsr.iv.next1153 = or disjoint i64 %lsr.iv1152, 1231  %uglygep1156.1 = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv.next1153232  store <8 x float> zeroinitializer, ptr %uglygep1156.1, align 4233  %lsr.iv.next1153.1 = or disjoint i64 %lsr.iv1152, 2234  %uglygep1156.2 = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv.next1153.1235  store <8 x float> zeroinitializer, ptr %uglygep1156.2, align 4236  %lsr.iv.next1153.2 = or disjoint i64 %lsr.iv1152, 3237  %uglygep1156.3 = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv.next1153.2238  store <8 x float> zeroinitializer, ptr %uglygep1156.3, align 4239  %lsr.iv.next1153.3 = or disjoint i64 %lsr.iv1152, 4240  %uglygep1156.4 = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv.next1153.3241  store <8 x float> zeroinitializer, ptr %uglygep1156.4, align 4242  %lsr.iv.next1153.4 = or disjoint i64 %lsr.iv1152, 5243  %uglygep1156.5 = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv.next1153.4244  store <8 x float> zeroinitializer, ptr %uglygep1156.5, align 4245  %lsr.iv.next1153.5 = or disjoint i64 %lsr.iv1152, 6246  %uglygep1156.6 = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv.next1153.5247  store <8 x float> zeroinitializer, ptr %uglygep1156.6, align 4248  %lsr.iv.next1153.6 = or disjoint i64 %lsr.iv1152, 7249  %uglygep1156.7 = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv.next1153.6250  store <8 x float> zeroinitializer, ptr %uglygep1156.7, align 4251  %lsr.iv.next1153.7 = add i64 %lsr.iv1152, 8252  %niter16.next.7 = add i64 %niter16, 8253  %niter16.ncmp.7 = icmp eq i64 %niter16.next.7, %unroll_iter15254  br i1 %niter16.ncmp.7, label %common.ret.loopexit.unr-lcssa.loopexit, label %vector.body847255 256common.ret.loopexit.unr-lcssa.loopexit:           ; preds = %vector.body847257  br label %common.ret.loopexit.unr-lcssa258 259common.ret.loopexit.unr-lcssa:                    ; preds = %common.ret.loopexit.unr-lcssa.loopexit, %vector.body847.preheader260  %lsr.iv1152.unr = phi i64 [ 0, %vector.body847.preheader ], [ %lsr.iv.next1153.7, %common.ret.loopexit.unr-lcssa.loopexit ]261  %lcmp.mod14.not = icmp eq i64 %xtraiter12, 0262  br i1 %lcmp.mod14.not, label %common.ret, label %vector.body847.epil.preheader263 264vector.body847.epil.preheader:                    ; preds = %common.ret.loopexit.unr-lcssa265  br label %vector.body847.epil266 267vector.body847.epil:                              ; preds = %vector.body847.epil.preheader, %vector.body847.epil268  %lsr.iv1152.epil = phi i64 [ %lsr.iv.next1153.epil, %vector.body847.epil ], [ %lsr.iv1152.unr, %vector.body847.epil.preheader ]269  %epil.iter13 = phi i64 [ %epil.iter13.next, %vector.body847.epil ], [ 0, %vector.body847.epil.preheader ]270  %uglygep1156.epil = getelementptr i8, ptr %uglygep11551, i64 %lsr.iv1152.epil271  store <8 x float> zeroinitializer, ptr %uglygep1156.epil, align 4272  %lsr.iv.next1153.epil = add i64 %lsr.iv1152.epil, 1273  %epil.iter13.next = add i64 %epil.iter13, 1274  %epil.iter13.cmp.not = icmp eq i64 %epil.iter13.next, %xtraiter12275  br i1 %epil.iter13.cmp.not, label %common.ret.loopexit, label %vector.body847.epil276 277common.ret.loopexit:                              ; preds = %vector.body847.epil278  br label %common.ret279 280common.ret.loopexit1:                             ; preds = %16281  br label %common.ret282 283common.ret:                                       ; preds = %common.ret.loopexit1, %common.ret.loopexit, %scalar.ph839.preheader, %common.ret.loopexit.unr-lcssa284  ret void285 286scalar.ph839.preheader:                           ; preds = %.lr.ph373287  store float 0.000000e+00, ptr %0, align 4288  br label %common.ret289 29016:                                               ; preds = %5291  %indvars.iv.next488 = add i64 %indvars.iv487, 1292  %exitcond492.not = icmp eq i64 %indvars.iv.next488, %3293  %uglygep1136 = getelementptr i8, ptr %lsr.iv1135, i64 %4294  br i1 %exitcond492.not, label %common.ret.loopexit1, label %5295}296