1 ; RUN: llc < %s -O1 -mcpu=atom -mtriple=i686-linux | FileCheck %s 2 3 declare void @external_function(...) 4 5 define i32 @test_return_val(i32 %a) nounwind { 6 ; CHECK: test_return_val 7 ; CHECK: movl 8 ; CHECK: nop 9 ; CHECK: nop 10 ; CHECK: nop 11 ; CHECK: nop 12 ; CHECK: nop 13 ; CHECK: nop 14 ; CHECK: ret 15 ret i32 %a 16 } 17 18 define i32 @test_optsize(i32 %a) nounwind optsize { 19 ; CHECK: test_optsize 20 ; CHECK: movl 21 ; CHECK-NEXT: ret 22 ret i32 %a 23 } 24 25 define i32 @test_minsize(i32 %a) nounwind minsize { 26 ; CHECK: test_minsize 27 ; CHECK: movl 28 ; CHECK-NEXT: ret 29 ret i32 %a 30 } 31 32 define i32 @test_add(i32 %a, i32 %b) nounwind { 33 ; CHECK: test_add 34 ; CHECK: addl 35 ; CHECK: nop 36 ; CHECK: nop 37 ; CHECK: nop 38 ; CHECK: nop 39 ; CHECK: ret 40 %result = add i32 %a, %b 41 ret i32 %result 42 } 43 44 define i32 @test_multiple_ret(i32 %a, i32 %b, i1 %c) nounwind { 45 ; CHECK: @test_multiple_ret 46 ; CHECK: je 47 48 ; CHECK: nop 49 ; CHECK: nop 50 ; CHECK: ret 51 52 ; CHECK: nop 53 ; CHECK: nop 54 ; CHECK: ret 55 56 br i1 %c, label %bb1, label %bb2 57 58 bb1: 59 ret i32 %a 60 61 bb2: 62 ret i32 %b 63 } 64 65 define void @test_call_others(i32 %x) nounwind 66 { 67 ; CHECK: test_call_others 68 ; CHECK: je 69 %tobool = icmp eq i32 %x, 0 70 br i1 %tobool, label %if.end, label %true.case 71 72 ; CHECK: jmp external_function 73 true.case: 74 tail call void bitcast (void (...)* @external_function to void ()*)() nounwind 75 br label %if.end 76 77 ; CHECK: nop 78 ; CHECK: nop 79 ; CHECK: nop 80 ; CHECK: nop 81 ; CHECK: ret 82 if.end: 83 ret void 84 85 } 86 87 define void @test_branch_to_same_bb(i32 %x, i32 %y) nounwind { 88 ; CHECK: @test_branch_to_same_bb 89 %cmp = icmp sgt i32 %x, 0 90 br i1 %cmp, label %while.cond, label %while.end 91 92 while.cond: 93 br label %while.cond 94 95 ; CHECK: nop 96 ; CHECK: nop 97 ; CHECK: nop 98 ; CHECK: nop 99 ; CHECK: ret 100 while.end: 101 ret void 102 } 103 104