| ; RUN: llc --verify-machineinstrs %s -o - | FileCheck %s |
| |
| target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" |
| target triple = "thumbv7m-unknown-unknown-eabi" |
| |
| declare dso_local i32 @h0(i32, i32) local_unnamed_addr #1 |
| |
| define dso_local i32 @f(i32 %a, i32 %b, i32 %c, i32 %d) local_unnamed_addr #0 { |
| entry: |
| %add = add nsw i32 %a, 1 |
| %sub = add nsw i32 %b, -1 |
| %call = tail call i32 @h0(i32 %add, i32 %sub) #0 |
| %add1 = add nsw i32 %c, %b |
| %mul = shl nsw i32 %call, 1 |
| %add2 = add nsw i32 %mul, %add1 |
| %sub3 = sub nsw i32 %c, %d |
| %mul4 = mul nsw i32 %add2, %sub3 |
| %sub5 = sub nsw i32 %call, %add1 |
| %div = sdiv i32 %mul4, %sub5 |
| %add6 = add nsw i32 %d, %c |
| %mul7 = mul nsw i32 %div, %add6 |
| %add8 = add nsw i32 %mul7, 1 |
| ret i32 %add8 |
| } |
| ; CHECK-LABEL: f: |
| ; CHECK: bl h0 |
| ; CHECK-NEXT: bl OUTLINED_FUNCTION_0 |
| ; CHECK-NEXT: adds r0, #1 |
| ; CHECK-NEXT: pop {r4, r5, r6, pc} |
| |
| |
| define dso_local i32 @g(i32 %a, i32 %b, i32 %c, i32 %d) local_unnamed_addr #0 { |
| entry: |
| %sub = add nsw i32 %a, -1 |
| %add = add nsw i32 %b, 1 |
| %call = tail call i32 @h0(i32 %sub, i32 %add) #0 |
| %add1 = add nsw i32 %c, %b |
| %mul = shl nsw i32 %call, 1 |
| %add2 = add nsw i32 %mul, %add1 |
| %sub3 = sub nsw i32 %c, %d |
| %mul4 = mul nsw i32 %add2, %sub3 |
| %sub5 = sub nsw i32 %call, %add1 |
| %div = sdiv i32 %mul4, %sub5 |
| %add6 = add nsw i32 %d, %c |
| %mul7 = mul nsw i32 %div, %add6 |
| %add8 = add nsw i32 %mul7, 2 |
| ret i32 %add8 |
| } |
| ; CHECK-LABEL: g: |
| ; CHECK: bl h0 |
| ; CHECK-NEXT: bl OUTLINED_FUNCTION_0 |
| ; CHECK-NEXT: adds r0, #2 |
| ; CHECK-NEXT: pop {r4, r5, r6, pc} |
| |
| |
| attributes #0 = { minsize nounwind optsize } |
| attributes #1 = { minsize optsize } |