| ; 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 -march=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 |
| } |