1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -O1 -mcpu=atom -mtriple=i686-linux | FileCheck %s 3 4declare void @external_function(...) 5 6define i32 @test_return_val(i32 %a) nounwind { 7; CHECK-LABEL: test_return_val: 8; CHECK: # %bb.0: 9; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 10; CHECK-NEXT: nop 11; CHECK-NEXT: nop 12; CHECK-NEXT: nop 13; CHECK-NEXT: nop 14; CHECK-NEXT: nop 15; CHECK-NEXT: nop 16; CHECK-NEXT: retl 17 ret i32 %a 18} 19 20define i32 @test_optsize(i32 %a) nounwind optsize { 21; CHECK-LABEL: test_optsize: 22; CHECK: # %bb.0: 23; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 24; CHECK-NEXT: retl 25 ret i32 %a 26} 27 28define i32 @test_minsize(i32 %a) nounwind minsize { 29; CHECK-LABEL: test_minsize: 30; CHECK: # %bb.0: 31; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 32; CHECK-NEXT: retl 33 ret i32 %a 34} 35 36define i32 @test_pgso(i32 %a) nounwind !prof !14 { 37; CHECK-LABEL: test_pgso: 38; CHECK: # %bb.0: 39; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 40; CHECK-NEXT: retl 41 ret i32 %a 42} 43 44define i32 @test_add(i32 %a, i32 %b) nounwind { 45; CHECK-LABEL: test_add: 46; CHECK: # %bb.0: 47; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 48; CHECK-NEXT: addl {{[0-9]+}}(%esp), %eax 49; CHECK-NEXT: nop 50; CHECK-NEXT: nop 51; CHECK-NEXT: nop 52; CHECK-NEXT: nop 53; CHECK-NEXT: retl 54 %result = add i32 %a, %b 55 ret i32 %result 56} 57 58define i32 @test_multiple_ret(i32 %a, i32 %b, i1 %c) nounwind { 59; CHECK-LABEL: test_multiple_ret: 60; CHECK: # %bb.0: 61; CHECK-NEXT: testb $1, {{[0-9]+}}(%esp) 62; CHECK-NEXT: je .LBB5_2 63; CHECK-NEXT: # %bb.1: # %bb1 64; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 65; CHECK-NEXT: nop 66; CHECK-NEXT: nop 67; CHECK-NEXT: retl 68; CHECK-NEXT: .LBB5_2: # %bb2 69; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 70; CHECK-NEXT: nop 71; CHECK-NEXT: nop 72; CHECK-NEXT: retl 73 74 75 76 br i1 %c, label %bb1, label %bb2 77 78bb1: 79 ret i32 %a 80 81bb2: 82 ret i32 %b 83} 84 85define void @test_call_others(i32 %x) nounwind { 86; CHECK-LABEL: test_call_others: 87; CHECK: # %bb.0: 88; CHECK-NEXT: cmpl $0, {{[0-9]+}}(%esp) 89; CHECK-NEXT: jne external_function@PLT # TAILCALL 90; CHECK-NEXT: # %bb.1: # %if.end 91; CHECK-NEXT: nop 92; CHECK-NEXT: nop 93; CHECK-NEXT: nop 94; CHECK-NEXT: nop 95; CHECK-NEXT: retl 96 %tobool = icmp eq i32 %x, 0 97 br i1 %tobool, label %if.end, label %true.case 98 99true.case: 100 tail call void @external_function() nounwind 101 br label %if.end 102 103if.end: 104 ret void 105 106} 107 108define void @test_branch_to_same_bb(i32 %x, i32 %y) nounwind { 109; CHECK-LABEL: test_branch_to_same_bb: 110; CHECK: # %bb.0: 111; CHECK-NEXT: cmpl $0, {{[0-9]+}}(%esp) 112; CHECK-NEXT: jle .LBB7_2 113; CHECK-NEXT: .p2align 4 114; CHECK-NEXT: .LBB7_1: # %while.cond 115; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 116; CHECK-NEXT: jmp .LBB7_1 117; CHECK-NEXT: .LBB7_2: # %while.end 118; CHECK-NEXT: nop 119; CHECK-NEXT: nop 120; CHECK-NEXT: nop 121; CHECK-NEXT: nop 122; CHECK-NEXT: retl 123 %cmp = icmp sgt i32 %x, 0 124 br i1 %cmp, label %while.cond, label %while.end 125 126while.cond: 127 br label %while.cond 128 129while.end: 130 ret void 131} 132 133!llvm.module.flags = !{!0} 134!0 = !{i32 1, !"ProfileSummary", !1} 135!1 = !{!2, !3, !4, !5, !6, !7, !8, !9} 136!2 = !{!"ProfileFormat", !"InstrProf"} 137!3 = !{!"TotalCount", i64 10000} 138!4 = !{!"MaxCount", i64 10} 139!5 = !{!"MaxInternalCount", i64 1} 140!6 = !{!"MaxFunctionCount", i64 1000} 141!7 = !{!"NumCounts", i64 3} 142!8 = !{!"NumFunctions", i64 3} 143!9 = !{!"DetailedSummary", !10} 144!10 = !{!11, !12, !13} 145!11 = !{i32 10000, i64 100, i32 1} 146!12 = !{i32 999000, i64 100, i32 1} 147!13 = !{i32 999999, i64 1, i32 2} 148!14 = !{!"function_entry_count", i64 0} 149