259 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2;RUN: llc < %s -mtriple=i686-- -mattr=-slow-incdec | FileCheck %s -check-prefixes=CHECK,SLOW3;RUN: llc < %s -mtriple=i686-- -mattr=+slow-incdec | FileCheck %s -check-prefixes=CHECK,FAST4 5define void @foo(i32 inreg %dns) minsize {6; CHECK-LABEL: foo:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: xorl %ecx, %ecx9; CHECK-NEXT: decl %ecx10; CHECK-NEXT: .LBB0_1: # %for.body11; CHECK-NEXT: # =>This Inner Loop Header: Depth=112; CHECK-NEXT: movzwl %cx, %edx13; CHECK-NEXT: decl %ecx14; CHECK-NEXT: cmpl %eax, %edx15; CHECK-NEXT: jl .LBB0_116; CHECK-NEXT: # %bb.2: # %for.end17; CHECK-NEXT: retl18entry:19 br label %for.body20 21for.body:22 %i.05 = phi i16 [ %dec, %for.body ], [ 0, %entry ]23 %dec = add i16 %i.05, -124 %conv = zext i16 %dec to i3225 %cmp = icmp slt i32 %conv, %dns26 br i1 %cmp, label %for.body, label %for.end27 28for.end:29 ret void30}31 32define void @bar(i32 inreg %dns) minsize {33; CHECK-LABEL: bar:34; CHECK: # %bb.0: # %entry35; CHECK-NEXT: xorl %ecx, %ecx36; CHECK-NEXT: incl %ecx37; CHECK-NEXT: .LBB1_1: # %for.body38; CHECK-NEXT: # =>This Inner Loop Header: Depth=139; CHECK-NEXT: movzwl %cx, %edx40; CHECK-NEXT: incl %ecx41; CHECK-NEXT: cmpl %eax, %edx42; CHECK-NEXT: jl .LBB1_143; CHECK-NEXT: # %bb.2: # %for.end44; CHECK-NEXT: retl45entry:46 br label %for.body47 48for.body:49 %i.05 = phi i16 [ %inc, %for.body ], [ 0, %entry ]50 %inc = add i16 %i.05, 151 %conv = zext i16 %inc to i3252 %cmp = icmp slt i32 %conv, %dns53 br i1 %cmp, label %for.body, label %for.end54for.end:55 ret void56}57 58define void @foo_optsize(i32 inreg %dns) optsize {59; CHECK-LABEL: foo_optsize:60; CHECK: # %bb.0: # %entry61; CHECK-NEXT: xorl %ecx, %ecx62; CHECK-NEXT: decl %ecx63; CHECK-NEXT: .LBB2_1: # %for.body64; CHECK-NEXT: # =>This Inner Loop Header: Depth=165; CHECK-NEXT: movzwl %cx, %edx66; CHECK-NEXT: decl %ecx67; CHECK-NEXT: cmpl %eax, %edx68; CHECK-NEXT: jl .LBB2_169; CHECK-NEXT: # %bb.2: # %for.end70; CHECK-NEXT: retl71entry:72 br label %for.body73 74for.body:75 %i.05 = phi i16 [ %dec, %for.body ], [ 0, %entry ]76 %dec = add i16 %i.05, -177 %conv = zext i16 %dec to i3278 %cmp = icmp slt i32 %conv, %dns79 br i1 %cmp, label %for.body, label %for.end80 81for.end:82 ret void83}84 85define void @bar_optsize(i32 inreg %dns) optsize {86; CHECK-LABEL: bar_optsize:87; CHECK: # %bb.0: # %entry88; CHECK-NEXT: xorl %ecx, %ecx89; CHECK-NEXT: incl %ecx90; CHECK-NEXT: .LBB3_1: # %for.body91; CHECK-NEXT: # =>This Inner Loop Header: Depth=192; CHECK-NEXT: movzwl %cx, %edx93; CHECK-NEXT: incl %ecx94; CHECK-NEXT: cmpl %eax, %edx95; CHECK-NEXT: jl .LBB3_196; CHECK-NEXT: # %bb.2: # %for.end97; CHECK-NEXT: retl98entry:99 br label %for.body100 101for.body:102 %i.05 = phi i16 [ %inc, %for.body ], [ 0, %entry ]103 %inc = add i16 %i.05, 1104 %conv = zext i16 %inc to i32105 %cmp = icmp slt i32 %conv, %dns106 br i1 %cmp, label %for.body, label %for.end107for.end:108 ret void109}110 111define void @foo_pgso(i32 inreg %dns) !prof !14 {112; CHECK-LABEL: foo_pgso:113; CHECK: # %bb.0: # %entry114; CHECK-NEXT: xorl %ecx, %ecx115; CHECK-NEXT: decl %ecx116; CHECK-NEXT: .LBB4_1: # %for.body117; CHECK-NEXT: # =>This Inner Loop Header: Depth=1118; CHECK-NEXT: movzwl %cx, %edx119; CHECK-NEXT: decl %ecx120; CHECK-NEXT: cmpl %eax, %edx121; CHECK-NEXT: jl .LBB4_1122; CHECK-NEXT: # %bb.2: # %for.end123; CHECK-NEXT: retl124entry:125 br label %for.body126 127for.body:128 %i.05 = phi i16 [ %dec, %for.body ], [ 0, %entry ]129 %dec = add i16 %i.05, -1130 %conv = zext i16 %dec to i32131 %cmp = icmp slt i32 %conv, %dns132 br i1 %cmp, label %for.body, label %for.end133 134for.end:135 ret void136}137 138define void @bar_pgso(i32 inreg %dns) !prof !14 {139; CHECK-LABEL: bar_pgso:140; CHECK: # %bb.0: # %entry141; CHECK-NEXT: xorl %ecx, %ecx142; CHECK-NEXT: incl %ecx143; CHECK-NEXT: .LBB5_1: # %for.body144; CHECK-NEXT: # =>This Inner Loop Header: Depth=1145; CHECK-NEXT: movzwl %cx, %edx146; CHECK-NEXT: incl %ecx147; CHECK-NEXT: cmpl %eax, %edx148; CHECK-NEXT: jl .LBB5_1149; CHECK-NEXT: # %bb.2: # %for.end150; CHECK-NEXT: retl151entry:152 br label %for.body153 154for.body:155 %i.05 = phi i16 [ %inc, %for.body ], [ 0, %entry ]156 %inc = add i16 %i.05, 1157 %conv = zext i16 %inc to i32158 %cmp = icmp slt i32 %conv, %dns159 br i1 %cmp, label %for.body, label %for.end160for.end:161 ret void162}163 164define void @foo_nosize(i32 inreg %dns) {165; SLOW-LABEL: foo_nosize:166; SLOW: # %bb.0: # %entry167; SLOW-NEXT: movw $-1, %cx168; SLOW-NEXT: .p2align 4169; SLOW-NEXT: .LBB6_1: # %for.body170; SLOW-NEXT: # =>This Inner Loop Header: Depth=1171; SLOW-NEXT: movzwl %cx, %edx172; SLOW-NEXT: decl %ecx173; SLOW-NEXT: cmpl %eax, %edx174; SLOW-NEXT: jl .LBB6_1175; SLOW-NEXT: # %bb.2: # %for.end176; SLOW-NEXT: retl177;178; FAST-LABEL: foo_nosize:179; FAST: # %bb.0: # %entry180; FAST-NEXT: movw $-1, %cx181; FAST-NEXT: .p2align 4182; FAST-NEXT: .LBB6_1: # %for.body183; FAST-NEXT: # =>This Inner Loop Header: Depth=1184; FAST-NEXT: movzwl %cx, %edx185; FAST-NEXT: addl $-1, %ecx186; FAST-NEXT: cmpl %eax, %edx187; FAST-NEXT: jl .LBB6_1188; FAST-NEXT: # %bb.2: # %for.end189; FAST-NEXT: retl190entry:191 br label %for.body192 193for.body:194 %i.05 = phi i16 [ %dec, %for.body ], [ 0, %entry ]195 %dec = add i16 %i.05, -1196 %conv = zext i16 %dec to i32197 %cmp = icmp slt i32 %conv, %dns198 br i1 %cmp, label %for.body, label %for.end199 200for.end:201 ret void202}203 204define void @bar_nosize(i32 inreg %dns) {205; SLOW-LABEL: bar_nosize:206; SLOW: # %bb.0: # %entry207; SLOW-NEXT: movw $1, %cx208; SLOW-NEXT: .p2align 4209; SLOW-NEXT: .LBB7_1: # %for.body210; SLOW-NEXT: # =>This Inner Loop Header: Depth=1211; SLOW-NEXT: movzwl %cx, %edx212; SLOW-NEXT: incl %ecx213; SLOW-NEXT: cmpl %eax, %edx214; SLOW-NEXT: jl .LBB7_1215; SLOW-NEXT: # %bb.2: # %for.end216; SLOW-NEXT: retl217;218; FAST-LABEL: bar_nosize:219; FAST: # %bb.0: # %entry220; FAST-NEXT: movw $1, %cx221; FAST-NEXT: .p2align 4222; FAST-NEXT: .LBB7_1: # %for.body223; FAST-NEXT: # =>This Inner Loop Header: Depth=1224; FAST-NEXT: movzwl %cx, %edx225; FAST-NEXT: addl $1, %ecx226; FAST-NEXT: cmpl %eax, %edx227; FAST-NEXT: jl .LBB7_1228; FAST-NEXT: # %bb.2: # %for.end229; FAST-NEXT: retl230entry:231 br label %for.body232 233for.body:234 %i.05 = phi i16 [ %inc, %for.body ], [ 0, %entry ]235 %inc = add i16 %i.05, 1236 %conv = zext i16 %inc to i32237 %cmp = icmp slt i32 %conv, %dns238 br i1 %cmp, label %for.body, label %for.end239for.end:240 ret void241}242 243!llvm.module.flags = !{!0}244!0 = !{i32 1, !"ProfileSummary", !1}245!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}246!2 = !{!"ProfileFormat", !"InstrProf"}247!3 = !{!"TotalCount", i64 10000}248!4 = !{!"MaxCount", i64 10}249!5 = !{!"MaxInternalCount", i64 1}250!6 = !{!"MaxFunctionCount", i64 1000}251!7 = !{!"NumCounts", i64 3}252!8 = !{!"NumFunctions", i64 3}253!9 = !{!"DetailedSummary", !10}254!10 = !{!11, !12, !13}255!11 = !{i32 10000, i64 100, i32 1}256!12 = !{i32 999000, i64 100, i32 1}257!13 = !{i32 999999, i64 1, i32 2}258!14 = !{!"function_entry_count", i64 0}259