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