From 7705c4f1be36d8c3384f71b71fdd6751a49d7a70 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Thu, 13 Oct 2016 23:00:11 +0000 Subject: [PATCH] CodeGen: use MSVC division on windows itanium Windows itanium is identical to MSVC when dealing with everything but C++. Lower the math routines into msvcrt rather than compiler-rt. llvm-svn: 284175 --- llvm/lib/Target/X86/X86ISelLowering.cpp | 3 +- llvm/test/CodeGen/X86/divide-windows-itanium.ll | 38 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 llvm/test/CodeGen/X86/divide-windows-itanium.ll diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index b4cb043..d02dc76 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -114,7 +114,8 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM, addBypassSlowDiv(64, 16); } - if (Subtarget.isTargetKnownWindowsMSVC()) { + if (Subtarget.isTargetKnownWindowsMSVC() || + Subtarget.isTargetWindowsItanium()) { // Setup Windows compiler runtime calls. setLibcallName(RTLIB::SDIV_I64, "_alldiv"); setLibcallName(RTLIB::UDIV_I64, "_aulldiv"); diff --git a/llvm/test/CodeGen/X86/divide-windows-itanium.ll b/llvm/test/CodeGen/X86/divide-windows-itanium.ll new file mode 100644 index 0000000..4a8a913 --- /dev/null +++ b/llvm/test/CodeGen/X86/divide-windows-itanium.ll @@ -0,0 +1,38 @@ +; RUN: llc -mtriple i686-windows-itanium -filetype asm -o - %s | FileCheck %s + +define i64 @f(i64 %i, i64 %j) { + %1 = sdiv i64 %i, %j + ret i64 %1 +} + +; CHECK-LABEL: _f: +; CHECK-NOT: calll ___divdi3 +; CHECK: calll __alldiv + +define i64 @g(i64 %i, i64 %j) { + %1 = udiv i64 %i, %j + ret i64 %1 +} + +; CHECK-LABEL: _g: +; CHECK-NOT: calll ___udivdi3 +; CHECK: calll __aulldiv + +define i64 @h(i64 %i, i64 %j) { + %1 = srem i64 %i, %j + ret i64 %1 +} + +; CHECK-LABEL: _h: +; CHECK-NOT: calll ___moddi3 +; CHECK: calll __allrem + +define i64 @i(i64 %i, i64 %j) { + %1 = urem i64 %i, %j + ret i64 %1 +} + +; CHECK-LABEL: _i: +; CHECK-NOT: calll ___umoddi3 +; CHECK: calll __aullrem + -- 2.7.4