| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 | |
| ; Test that libcalls used only by return are tail called. | |
| ; This tests non-float libcalls | |
| ; RUN: llc -mtriple=hexagon-- -verify-machineinstrs < %s | FileCheck %s | |
| define i32 @udiv(i32 %a, i32 %b) nounwind { | |
| ; CHECK-LABEL: udiv: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: { | |
| ; CHECK-NEXT: jump __hexagon_udivsi3 | |
| ; CHECK-NEXT: } | |
| %1 = udiv i32 %a, %b | |
| ret i32 %1 | |
| } | |
| define i32 @udivconstby(i32 %a) nounwind { | |
| ; CHECK-LABEL: udivconstby: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: { | |
| ; CHECK-NEXT: r1:0 = combine(r0,#10) | |
| ; CHECK-NEXT: jump __hexagon_udivsi3 | |
| ; CHECK-NEXT: } | |
| %1 = udiv i32 10, %a | |
| ret i32 %1 | |
| } | |
| define i32 @sdiv(i32 %a, i32 %b) nounwind { | |
| ; CHECK-LABEL: sdiv: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: { | |
| ; CHECK-NEXT: jump __hexagon_divsi3 | |
| ; CHECK-NEXT: } | |
| %1 = sdiv i32 %a, %b | |
| ret i32 %1 | |
| } | |
| define i32 @sdivconstby(i32 %a) nounwind { | |
| ; CHECK-LABEL: sdivconstby: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: { | |
| ; CHECK-NEXT: r1:0 = combine(r0,#10) | |
| ; CHECK-NEXT: jump __hexagon_divsi3 | |
| ; CHECK-NEXT: } | |
| %1 = sdiv i32 10, %a | |
| ret i32 %1 | |
| } | |
| define i32 @urem(i32 %a, i32 %b) nounwind { | |
| ; CHECK-LABEL: urem: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: { | |
| ; CHECK-NEXT: jump __hexagon_umodsi3 | |
| ; CHECK-NEXT: } | |
| %1 = urem i32 %a, %b | |
| ret i32 %1 | |
| } | |
| define i32 @uremconstby(i32 %a) nounwind { | |
| ; CHECK-LABEL: uremconstby: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: { | |
| ; CHECK-NEXT: r1:0 = combine(r0,#10) | |
| ; CHECK-NEXT: jump __hexagon_umodsi3 | |
| ; CHECK-NEXT: } | |
| %1 = urem i32 10, %a | |
| ret i32 %1 | |
| } | |
| define i32 @srem(i32 %a, i32 %b) nounwind { | |
| ; CHECK-LABEL: srem: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: { | |
| ; CHECK-NEXT: jump __hexagon_modsi3 | |
| ; CHECK-NEXT: } | |
| %1 = srem i32 %a, %b | |
| ret i32 %1 | |
| } | |
| define i32 @sremconstby(i32 %a) nounwind { | |
| ; CHECK-LABEL: sremconstby: | |
| ; CHECK: // %bb.0: | |
| ; CHECK-NEXT: { | |
| ; CHECK-NEXT: r1:0 = combine(r0,#10) | |
| ; CHECK-NEXT: jump __hexagon_modsi3 | |
| ; CHECK-NEXT: } | |
| %1 = srem i32 10, %a | |
| ret i32 %1 | |
| } |