1; RUN: llc --verify-machineinstrs %s -o - | FileCheck %s 2 3target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" 4target triple = "thumbv7m-unknown-unknown-eabi" 5 6declare dso_local i32 @h0(i32, i32) local_unnamed_addr #1 7 8define dso_local i32 @f(i32 %a, i32 %b, i32 %c, i32 %d) local_unnamed_addr #0 { 9entry: 10 %add = add nsw i32 %a, 1 11 %sub = add nsw i32 %b, -1 12 %call = tail call i32 @h0(i32 %add, i32 %sub) #0 13 %add1 = add nsw i32 %c, %b 14 %mul = shl nsw i32 %call, 1 15 %add2 = add nsw i32 %mul, %add1 16 %sub3 = sub nsw i32 %c, %d 17 %mul4 = mul nsw i32 %add2, %sub3 18 %sub5 = sub nsw i32 %call, %add1 19 %div = sdiv i32 %mul4, %sub5 20 %add6 = add nsw i32 %d, %c 21 %mul7 = mul nsw i32 %div, %add6 22 %add8 = add nsw i32 %mul7, 1 23 ret i32 %add8 24} 25; CHECK-LABEL: f: 26; CHECK: bl h0 27; CHECK-NEXT: bl OUTLINED_FUNCTION_0 28; CHECK-NEXT: adds r0, #1 29; CHECK-NEXT: pop {r4, r5, r6, pc} 30 31 32define dso_local i32 @g(i32 %a, i32 %b, i32 %c, i32 %d) local_unnamed_addr #0 { 33entry: 34 %sub = add nsw i32 %a, -1 35 %add = add nsw i32 %b, 1 36 %call = tail call i32 @h0(i32 %sub, i32 %add) #0 37 %add1 = add nsw i32 %c, %b 38 %mul = shl nsw i32 %call, 1 39 %add2 = add nsw i32 %mul, %add1 40 %sub3 = sub nsw i32 %c, %d 41 %mul4 = mul nsw i32 %add2, %sub3 42 %sub5 = sub nsw i32 %call, %add1 43 %div = sdiv i32 %mul4, %sub5 44 %add6 = add nsw i32 %d, %c 45 %mul7 = mul nsw i32 %div, %add6 46 %add8 = add nsw i32 %mul7, 2 47 ret i32 %add8 48} 49; CHECK-LABEL: g: 50; CHECK: bl h0 51; CHECK-NEXT: bl OUTLINED_FUNCTION_0 52; CHECK-NEXT: adds r0, #2 53; CHECK-NEXT: pop {r4, r5, r6, pc} 54 55 56attributes #0 = { minsize nounwind optsize } 57attributes #1 = { minsize optsize } 58