1b6e8f660SMel Chen; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 2b6e8f660SMel Chen; RUN: opt < %s -S -passes=loop-vectorize -enable-vplan-native-path -force-vector-interleave=1 -force-vector-width=4 | FileCheck %s 3b6e8f660SMel Chen 4b6e8f660SMel Chentarget datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128" 5b6e8f660SMel Chen 6b6e8f660SMel Chendefine void @foo(ptr %h) !dbg !4 { 7b6e8f660SMel Chen; CHECK-LABEL: define void @foo( 8b6e8f660SMel Chen; CHECK-SAME: ptr [[H:%.*]]) !dbg [[DBG4:![0-9]+]] { 9b6e8f660SMel Chen; CHECK-NEXT: entry: 1009457270SStephen Tozer; CHECK-NEXT: #dbg_value(i64 0, [[META11:![0-9]+]], !DIExpression(), [[META20:![0-9]+]]) 11b6e8f660SMel Chen; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]], !dbg [[DBG21:![0-9]+]] 12b6e8f660SMel Chen; CHECK: vector.ph: 13b6e8f660SMel Chen; CHECK-NEXT: br label [[VECTOR_BODY:%.*]], !dbg [[DBG21]] 14b6e8f660SMel Chen; CHECK: vector.body: 15b6e8f660SMel Chen; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[FOR_COND_CLEANUP32:%.*]] ] 16b6e8f660SMel Chen; CHECK-NEXT: br label [[FOR_COND5_PREHEADER1:%.*]], !dbg [[DBG21]] 17b6e8f660SMel Chen; CHECK: for.cond5.preheader1: 18*aff1242bSElvis Wang; CHECK-NEXT: [[VEC_PHI:%.*]] = phi <4 x i64> [ zeroinitializer, [[VECTOR_BODY]] ], [ [[TMP4:%.*]], [[FOR_COND5_PREHEADER1]] ], !dbg [[DBG34:![0-9]+]] 19*aff1242bSElvis Wang; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i32, ptr [[H]], <4 x i64> [[VEC_PHI]] 2038fffa63SPaul Walker; CHECK-NEXT: call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> zeroinitializer, <4 x ptr> [[TMP0]], i32 4, <4 x i1> splat (i1 true)), !dbg [[DBG22:![0-9]+]] 21b6e8f660SMel Chen; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i32, <4 x ptr> [[TMP0]], i64 1, !dbg [[DBG22]] 2238fffa63SPaul Walker; CHECK-NEXT: call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> splat (i32 1), <4 x ptr> [[TMP1]], i32 4, <4 x i1> splat (i1 true)), !dbg [[DBG22]] 23b6e8f660SMel Chen; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i32, <4 x ptr> [[TMP0]], i64 2, !dbg [[DBG22]] 2438fffa63SPaul Walker; CHECK-NEXT: call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> splat (i32 2), <4 x ptr> [[TMP2]], i32 4, <4 x i1> splat (i1 true)), !dbg [[DBG22]] 25b6e8f660SMel Chen; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i32, <4 x ptr> [[TMP0]], i64 3, !dbg [[DBG22]] 2638fffa63SPaul Walker; CHECK-NEXT: call void @llvm.masked.scatter.v4i32.v4p0(<4 x i32> splat (i32 3), <4 x ptr> [[TMP3]], i32 4, <4 x i1> splat (i1 true)), !dbg [[DBG22]] 2738fffa63SPaul Walker; CHECK-NEXT: [[TMP4]] = add nuw nsw <4 x i64> [[VEC_PHI]], splat (i64 1), !dbg [[DBG24:![0-9]+]] 2838fffa63SPaul Walker; CHECK-NEXT: [[TMP5:%.*]] = icmp eq <4 x i64> [[TMP4]], splat (i64 5), !dbg [[DBG25:![0-9]+]] 291402c016SFlorian Hahn; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i1> [[TMP5]], i32 0, !dbg [[DBG26:![0-9]+]] 301402c016SFlorian Hahn; CHECK-NEXT: br i1 [[TMP6]], label [[FOR_COND_CLEANUP32]], label [[FOR_COND5_PREHEADER1]], !dbg [[DBG26]] 317346e7ccSFlorian Hahn; CHECK: vector.latch: 32b6e8f660SMel Chen; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4 33b6e8f660SMel Chen; CHECK-NEXT: [[TMP9:%.*]] = icmp eq i64 [[INDEX_NEXT]], 20 3438fffa63SPaul Walker; CHECK-NEXT: br i1 [[TMP9]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP27:![0-9]+]] 35b6e8f660SMel Chen; CHECK: middle.block: 36b6e8f660SMel Chen; CHECK-NEXT: br i1 false, label [[EXIT:%.*]], label [[SCALAR_PH]], !dbg [[DBG21]] 37b6e8f660SMel Chen; CHECK: scalar.ph: 38b6e8f660SMel Chen; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 20, [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ] 39b6e8f660SMel Chen; CHECK-NEXT: br label [[FOR_COND1_PREHEADER:%.*]], !dbg [[DBG21]] 40b6e8f660SMel Chen; CHECK: for.cond1.preheader: 41b6e8f660SMel Chen; CHECK-NEXT: [[I_023:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[INC13:%.*]], [[FOR_COND_CLEANUP3:%.*]] ] 4209457270SStephen Tozer; CHECK-NEXT: #dbg_value(i64 [[I_023]], [[META11]], !DIExpression(), [[META20]]) 431402c016SFlorian Hahn; CHECK-NEXT: br label [[FOR_COND5_PREHEADER:%.*]], !dbg [[DBG26]] 44b6e8f660SMel Chen; CHECK: for.cond5.preheader: 45*aff1242bSElvis Wang; CHECK-NEXT: [[L_022:%.*]] = phi i64 [ 0, [[FOR_COND1_PREHEADER]] ], [ [[INC10:%.*]], [[FOR_COND5_PREHEADER]] ], !dbg [[DBG34]] 46b6e8f660SMel Chen; CHECK-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[H]], i64 [[L_022]] 47b6e8f660SMel Chen; CHECK-NEXT: store i32 0, ptr [[TMP10]], align 4, !dbg [[DBG22]] 4838fffa63SPaul Walker; CHECK-NEXT: [[ARRAYIDX_1:%.*]] = getelementptr i32, ptr [[TMP10]], i64 1, !dbg [[DBG31:![0-9]+]] 49b6e8f660SMel Chen; CHECK-NEXT: store i32 1, ptr [[ARRAYIDX_1]], align 4, !dbg [[DBG22]] 5038fffa63SPaul Walker; CHECK-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr i32, ptr [[TMP10]], i64 2, !dbg [[DBG31]] 51b6e8f660SMel Chen; CHECK-NEXT: store i32 2, ptr [[ARRAYIDX_2]], align 4, !dbg [[DBG22]] 5238fffa63SPaul Walker; CHECK-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr i32, ptr [[TMP10]], i64 3, !dbg [[DBG31]] 53b6e8f660SMel Chen; CHECK-NEXT: store i32 3, ptr [[ARRAYIDX_3]], align 4, !dbg [[DBG22]] 54b6e8f660SMel Chen; CHECK-NEXT: [[INC10]] = add nuw nsw i64 [[L_022]], 1, !dbg [[DBG24]] 55b6e8f660SMel Chen; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[INC10]], 5, !dbg [[DBG25]] 561402c016SFlorian Hahn; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP3]], label [[FOR_COND5_PREHEADER]], !dbg [[DBG26]] 57b6e8f660SMel Chen; CHECK: for.cond.cleanup3: 5838fffa63SPaul Walker; CHECK-NEXT: [[INC13]] = add nuw nsw i64 [[I_023]], 1, !dbg [[DBG32:![0-9]+]] 5909457270SStephen Tozer; CHECK-NEXT: #dbg_value(i64 [[INC13]], [[META11]], !DIExpression(), [[META20]]) 6038fffa63SPaul Walker; CHECK-NEXT: [[EXITCOND24_NOT:%.*]] = icmp eq i64 [[INC13]], 23, !dbg [[DBG33:![0-9]+]] 61b6e8f660SMel Chen; CHECK-NEXT: br i1 [[EXITCOND24_NOT]], label [[EXIT]], label [[FOR_COND1_PREHEADER]], !dbg [[DBG21]], !llvm.loop [[LOOP34:![0-9]+]] 62b6e8f660SMel Chen; CHECK: exit: 63b6e8f660SMel Chen; CHECK-NEXT: ret void, !dbg [[DBG35:![0-9]+]] 64b6e8f660SMel Chen; 65b6e8f660SMel Chenentry: 66b6e8f660SMel Chen call void @llvm.dbg.value(metadata i64 0, metadata !11, metadata !DIExpression()), !dbg !20 67b6e8f660SMel Chen br label %for.cond1.preheader, !dbg !21 68b6e8f660SMel Chen 69b6e8f660SMel Chenfor.cond1.preheader: ; preds = %entry, %for.cond.cleanup3 70b6e8f660SMel Chen %i.023 = phi i64 [ 0, %entry ], [ %inc13, %for.cond.cleanup3 ] 71b6e8f660SMel Chen call void @llvm.dbg.value(metadata i64 %i.023, metadata !11, metadata !DIExpression()), !dbg !20 72b6e8f660SMel Chen br label %for.cond5.preheader, !dbg !22 73b6e8f660SMel Chen 74b6e8f660SMel Chenfor.cond5.preheader: ; preds = %for.cond1.preheader, %for.cond5.preheader 75*aff1242bSElvis Wang %l.022 = phi i64 [ 0, %for.cond1.preheader ], [ %inc10, %for.cond5.preheader ], !dbg !34 76b6e8f660SMel Chen %0 = getelementptr i32, ptr %h, i64 %l.022 77b6e8f660SMel Chen store i32 0, ptr %0, align 4, !dbg !24 78b6e8f660SMel Chen %arrayidx.1 = getelementptr i32, ptr %0, i64 1, !dbg !26 79b6e8f660SMel Chen store i32 1, ptr %arrayidx.1, align 4, !dbg !24 80b6e8f660SMel Chen %arrayidx.2 = getelementptr i32, ptr %0, i64 2, !dbg !26 81b6e8f660SMel Chen store i32 2, ptr %arrayidx.2, align 4, !dbg !24 82b6e8f660SMel Chen %arrayidx.3 = getelementptr i32, ptr %0, i64 3, !dbg !26 83b6e8f660SMel Chen store i32 3, ptr %arrayidx.3, align 4, !dbg !24 84b6e8f660SMel Chen %inc10 = add nuw nsw i64 %l.022, 1, !dbg !27 85b6e8f660SMel Chen %exitcond.not = icmp eq i64 %inc10, 5, !dbg !28 86b6e8f660SMel Chen br i1 %exitcond.not, label %for.cond.cleanup3, label %for.cond5.preheader, !dbg !22 87b6e8f660SMel Chen 88b6e8f660SMel Chenfor.cond.cleanup3: ; preds = %for.cond5.preheader 89b6e8f660SMel Chen %inc13 = add nuw nsw i64 %i.023, 1, !dbg !29 90b6e8f660SMel Chen call void @llvm.dbg.value(metadata i64 %inc13, metadata !11, metadata !DIExpression()), !dbg !20 91b6e8f660SMel Chen %exitcond24.not = icmp eq i64 %inc13, 23, !dbg !30 92b6e8f660SMel Chen br i1 %exitcond24.not, label %exit, label %for.cond1.preheader, !dbg !21, !llvm.loop !31 93b6e8f660SMel Chen 94b6e8f660SMel Chenexit: ; preds = %for.cond.cleanup3 95b6e8f660SMel Chen ret void, !dbg !23 96b6e8f660SMel Chen} 97b6e8f660SMel Chen 98b6e8f660SMel Chendeclare void @llvm.dbg.value(metadata, metadata, metadata) 99b6e8f660SMel Chen 100b6e8f660SMel Chen!llvm.dbg.cu = !{!0} 101b6e8f660SMel Chen!llvm.module.flags = !{!2, !3} 102b6e8f660SMel Chen 103b6e8f660SMel Chen!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) 104b6e8f660SMel Chen!1 = !DIFile(filename: "outer-loop-vect.c", directory: "/test/file/path") 105b6e8f660SMel Chen!2 = !{i32 2, !"Debug Info Version", i32 3} 106b6e8f660SMel Chen!3 = !{i32 7, !"debug-info-assignment-tracking", i1 true} 107b6e8f660SMel Chen!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 8, type: !5, scopeLine: 8, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !9) 108b6e8f660SMel Chen!5 = !DISubroutineType(types: !6) 109b6e8f660SMel Chen!6 = !{null, !7} 110b6e8f660SMel Chen!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64) 111b6e8f660SMel Chen!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) 112b6e8f660SMel Chen!9 = !{!10, !11, !14, !17} 113b6e8f660SMel Chen!10 = !DILocalVariable(name: "h", arg: 1, scope: !4, file: !1, line: 8, type: !7) 114b6e8f660SMel Chen!11 = !DILocalVariable(name: "i", scope: !12, file: !1, line: 10, type: !13) 115b6e8f660SMel Chen!12 = distinct !DILexicalBlock(scope: !4, file: !1, line: 10, column: 3) 116b6e8f660SMel Chen!13 = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned) 117b6e8f660SMel Chen!14 = !DILocalVariable(name: "l", scope: !15, file: !1, line: 11, type: !13) 118b6e8f660SMel Chen!15 = distinct !DILexicalBlock(scope: !16, file: !1, line: 11, column: 5) 119b6e8f660SMel Chen!16 = distinct !DILexicalBlock(scope: !12, file: !1, line: 10, column: 3) 120b6e8f660SMel Chen!17 = !DILocalVariable(name: "j", scope: !18, file: !1, line: 12, type: !13) 121b6e8f660SMel Chen!18 = distinct !DILexicalBlock(scope: !19, file: !1, line: 12, column: 7) 122b6e8f660SMel Chen!19 = distinct !DILexicalBlock(scope: !15, file: !1, line: 11, column: 5) 123b6e8f660SMel Chen!20 = !DILocation(line: 0, scope: !12) 124b6e8f660SMel Chen!21 = !DILocation(line: 10, column: 3, scope: !12) 125b6e8f660SMel Chen!22 = !DILocation(line: 11, column: 5, scope: !15) 126b6e8f660SMel Chen!23 = !DILocation(line: 14, column: 1, scope: !4) 127b6e8f660SMel Chen!24 = !DILocation(line: 13, column: 11, scope: !25) 128b6e8f660SMel Chen!25 = distinct !DILexicalBlock(scope: !18, file: !1, line: 12, column: 7) 129b6e8f660SMel Chen!26 = !DILocation(line: 13, column: 2, scope: !25) 130b6e8f660SMel Chen!27 = !DILocation(line: 11, column: 32, scope: !19) 131b6e8f660SMel Chen!28 = !DILocation(line: 11, column: 26, scope: !19) 132b6e8f660SMel Chen!29 = !DILocation(line: 10, column: 30, scope: !16) 133b6e8f660SMel Chen!30 = !DILocation(line: 10, column: 24, scope: !16) 134b6e8f660SMel Chen!31 = distinct !{!31, !21, !32, !33} 135b6e8f660SMel Chen!32 = !DILocation(line: 13, column: 13, scope: !12) 136b6e8f660SMel Chen!33 = !{!"llvm.loop.vectorize.enable", i1 true} 137*aff1242bSElvis Wang!34 = !DILocation(line: 10, column: 5, scope: !12) 138b6e8f660SMel Chen;. 139b6e8f660SMel Chen; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) 140b6e8f660SMel Chen; CHECK: [[META1]] = !DIFile(filename: "outer-loop-vect.c", directory: {{.*}}) 141b6e8f660SMel Chen; CHECK: [[DBG4]] = distinct !DISubprogram(name: "foo", scope: [[META1]], file: [[META1]], line: 8, type: [[META5:![0-9]+]], scopeLine: 8, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META9:![0-9]+]]) 142b6e8f660SMel Chen; CHECK: [[META5]] = !DISubroutineType(types: [[META6:![0-9]+]]) 143b6e8f660SMel Chen; CHECK: [[META6]] = !{null, [[META7:![0-9]+]]} 144b6e8f660SMel Chen; CHECK: [[META7]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META8:![0-9]+]], size: 64) 145b6e8f660SMel Chen; CHECK: [[META8]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) 146b6e8f660SMel Chen; CHECK: [[META9]] = !{[[META10:![0-9]+]], [[META11]], [[META14:![0-9]+]], [[META17:![0-9]+]]} 147b6e8f660SMel Chen; CHECK: [[META10]] = !DILocalVariable(name: "h", arg: 1, scope: [[DBG4]], file: [[META1]], line: 8, type: [[META7]]) 148b6e8f660SMel Chen; CHECK: [[META11]] = !DILocalVariable(name: "i", scope: [[META12:![0-9]+]], file: [[META1]], line: 10, type: [[META13:![0-9]+]]) 149b6e8f660SMel Chen; CHECK: [[META12]] = distinct !DILexicalBlock(scope: [[DBG4]], file: [[META1]], line: 10, column: 3) 150b6e8f660SMel Chen; CHECK: [[META13]] = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned) 151b6e8f660SMel Chen; CHECK: [[META14]] = !DILocalVariable(name: "l", scope: [[META15:![0-9]+]], file: [[META1]], line: 11, type: [[META13]]) 152b6e8f660SMel Chen; CHECK: [[META15]] = distinct !DILexicalBlock(scope: [[META16:![0-9]+]], file: [[META1]], line: 11, column: 5) 153b6e8f660SMel Chen; CHECK: [[META16]] = distinct !DILexicalBlock(scope: [[META12]], file: [[META1]], line: 10, column: 3) 154b6e8f660SMel Chen; CHECK: [[META17]] = !DILocalVariable(name: "j", scope: [[META18:![0-9]+]], file: [[META1]], line: 12, type: [[META13]]) 155b6e8f660SMel Chen; CHECK: [[META18]] = distinct !DILexicalBlock(scope: [[META19:![0-9]+]], file: [[META1]], line: 12, column: 7) 156b6e8f660SMel Chen; CHECK: [[META19]] = distinct !DILexicalBlock(scope: [[META15]], file: [[META1]], line: 11, column: 5) 15709457270SStephen Tozer; CHECK: [[META20]] = !DILocation(line: 0, scope: [[META12]]) 158b6e8f660SMel Chen; CHECK: [[DBG21]] = !DILocation(line: 10, column: 3, scope: [[META12]]) 159b6e8f660SMel Chen; CHECK: [[DBG22]] = !DILocation(line: 13, column: 11, scope: [[META23:![0-9]+]]) 160b6e8f660SMel Chen; CHECK: [[META23]] = distinct !DILexicalBlock(scope: [[META18]], file: [[META1]], line: 12, column: 7) 161b6e8f660SMel Chen; CHECK: [[DBG24]] = !DILocation(line: 11, column: 32, scope: [[META19]]) 162b6e8f660SMel Chen; CHECK: [[DBG25]] = !DILocation(line: 11, column: 26, scope: [[META19]]) 1631402c016SFlorian Hahn; CHECK: [[DBG26]] = !DILocation(line: 11, column: 5, scope: [[META15]]) 16438fffa63SPaul Walker; CHECK: [[LOOP27]] = distinct !{[[LOOP27]], [[DBG21]], [[META28:![0-9]+]], [[META29:![0-9]+]], [[META30:![0-9]+]]} 16538fffa63SPaul Walker; CHECK: [[META28]] = !DILocation(line: 13, column: 13, scope: [[META12]]) 16638fffa63SPaul Walker; CHECK: [[META29]] = !{!"llvm.loop.isvectorized", i32 1} 16738fffa63SPaul Walker; CHECK: [[META30]] = !{!"llvm.loop.unroll.runtime.disable"} 16838fffa63SPaul Walker; CHECK: [[DBG31]] = !DILocation(line: 13, column: 2, scope: [[META23]]) 16938fffa63SPaul Walker; CHECK: [[DBG32]] = !DILocation(line: 10, column: 30, scope: [[META16]]) 17038fffa63SPaul Walker; CHECK: [[DBG33]] = !DILocation(line: 10, column: 24, scope: [[META16]]) 17138fffa63SPaul Walker; CHECK: [[LOOP34]] = distinct !{[[LOOP34]], [[DBG21]], [[META28]], [[META29]]} 172b6e8f660SMel Chen; CHECK: [[DBG35]] = !DILocation(line: 14, column: 1, scope: [[DBG4]]) 173b6e8f660SMel Chen;. 174