1; RUN: llc < %s -O1 -mcpu=atom -mtriple=i686-linux | FileCheck %s 2 3declare void @external_function(...) 4 5define 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 18define i32 @test_optsize(i32 %a) nounwind optsize { 19; CHECK: test_optsize 20; CHECK: movl 21; CHECK-NEXT: ret 22 ret i32 %a 23} 24 25define i32 @test_minsize(i32 %a) nounwind minsize { 26; CHECK: test_minsize 27; CHECK: movl 28; CHECK-NEXT: ret 29 ret i32 %a 30} 31 32define 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 44define 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 58bb1: 59 ret i32 %a 60 61bb2: 62 ret i32 %b 63} 64 65define 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 73true.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 82if.end: 83 ret void 84 85} 86 87define 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 92while.cond: 93 br label %while.cond 94 95; CHECK: nop 96; CHECK: nop 97; CHECK: nop 98; CHECK: nop 99; CHECK: ret 100while.end: 101 ret void 102} 103 104