[llvm-branch-commits] [llvm-branch] r265243 - Merging r263118: ARM: correct __builtin_longjmp on WoA
Author: rengolin Date: Sat Apr 2 15:31:15 2016 New Revision: 265243 URL: http://llvm.org/viewvc/llvm-project?rev=265243&view=rev Log: Merging r263118: ARM: correct __builtin_longjmp on WoA Added: llvm/branches/release_38/test/CodeGen/ARM/Windows/builtin_longjmp.ll Modified: llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp Modified: llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp?rev=265243&r1=265242&r2=265243&view=diff == --- llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp (original) +++ llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp Sat Apr 2 15:31:15 2016 @@ -1843,8 +1843,10 @@ void ARMAsmPrinter::EmitInstruction(cons // ldr $scratch, [$src, #4] // ldr r7, [$src] // bx $scratch +const Triple &TT = TM.getTargetTriple(); unsigned SrcReg = MI->getOperand(0).getReg(); unsigned ScratchReg = MI->getOperand(1).getReg(); + EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::tLDRi) .addReg(ScratchReg) .addReg(SrcReg) @@ -1871,7 +1873,7 @@ void ARMAsmPrinter::EmitInstruction(cons .addReg(0)); EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::tLDRi) - .addReg(ARM::R7) + .addReg(TT.isOSWindows() ? ARM::R11 : ARM::R7) .addReg(SrcReg) .addImm(0) // Predicate. Added: llvm/branches/release_38/test/CodeGen/ARM/Windows/builtin_longjmp.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/test/CodeGen/ARM/Windows/builtin_longjmp.ll?rev=265243&view=auto == --- llvm/branches/release_38/test/CodeGen/ARM/Windows/builtin_longjmp.ll (added) +++ llvm/branches/release_38/test/CodeGen/ARM/Windows/builtin_longjmp.ll Sat Apr 2 15:31:15 2016 @@ -0,0 +1,16 @@ +; RUN: llc -mtriple thumbv7--windows-itanium -filetype asm -o - %s | FileCheck %s + +declare void @llvm.eh.sjlj.longjmp(i8*) + +define arm_aapcs_vfpcc void @test___builtin_longjump(i8* %b) { +entry: + tail call void @llvm.eh.sjlj.longjmp(i8* %b) + unreachable +} + +; CHECK: ldr r[[SP:[0-9]+]], [r0, #8] +; CHECK: mov sp, r[[SP]] +; CHECK: ldr r[[PC:[0-9]+]], [r0, #4] +; CHECK: ldr r11, [r0] +; CHECK: bx r[[PC]] + ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm-branch] r265244 - Merging r263123: ARM: follow up improvements for SVN r263118
Author: rengolin Date: Sat Apr 2 15:32:54 2016 New Revision: 265244 URL: http://llvm.org/viewvc/llvm-project?rev=265244&view=rev Log: Merging r263123: ARM: follow up improvements for SVN r263118 Modified: llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp llvm/branches/release_38/lib/Target/ARM/ARMBaseInstrInfo.cpp llvm/branches/release_38/lib/Target/ARM/ARMInstrInfo.td llvm/branches/release_38/lib/Target/ARM/ARMInstrThumb.td llvm/branches/release_38/test/CodeGen/ARM/Windows/builtin_longjmp.ll Modified: llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp?rev=265244&r1=265243&r2=265244&view=diff == --- llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp (original) +++ llvm/branches/release_38/lib/Target/ARM/ARMAsmPrinter.cpp Sat Apr 2 15:32:54 2016 @@ -1837,13 +1837,13 @@ void ARMAsmPrinter::EmitInstruction(cons .addReg(0)); return; } - case ARM::tInt_eh_sjlj_longjmp: { + case ARM::tInt_eh_sjlj_longjmp: + case ARM::tInt_WIN_eh_sjlj_longjmp: { // ldr $scratch, [$src, #8] // mov sp, $scratch // ldr $scratch, [$src, #4] // ldr r7, [$src] // bx $scratch -const Triple &TT = TM.getTargetTriple(); unsigned SrcReg = MI->getOperand(0).getReg(); unsigned ScratchReg = MI->getOperand(1).getReg(); @@ -1873,7 +1873,7 @@ void ARMAsmPrinter::EmitInstruction(cons .addReg(0)); EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::tLDRi) - .addReg(TT.isOSWindows() ? ARM::R11 : ARM::R7) + .addReg(Opc == ARM::tInt_WIN_eh_sjlj_longjmp ? ARM::R11 : ARM::R7) .addReg(SrcReg) .addImm(0) // Predicate. Modified: llvm/branches/release_38/lib/Target/ARM/ARMBaseInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/lib/Target/ARM/ARMBaseInstrInfo.cpp?rev=265244&r1=265243&r2=265244&view=diff == --- llvm/branches/release_38/lib/Target/ARM/ARMBaseInstrInfo.cpp (original) +++ llvm/branches/release_38/lib/Target/ARM/ARMBaseInstrInfo.cpp Sat Apr 2 15:32:54 2016 @@ -632,6 +632,7 @@ unsigned ARMBaseInstrInfo::GetInstSizeIn case ARM::Int_eh_sjlj_longjmp: return 16; case ARM::tInt_eh_sjlj_longjmp: + case ARM::tInt_WIN_eh_sjlj_longjmp: return 10; case ARM::Int_eh_sjlj_setjmp: case ARM::Int_eh_sjlj_setjmp_nofp: Modified: llvm/branches/release_38/lib/Target/ARM/ARMInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/lib/Target/ARM/ARMInstrInfo.td?rev=265244&r1=265243&r2=265244&view=diff == --- llvm/branches/release_38/lib/Target/ARM/ARMInstrInfo.td (original) +++ llvm/branches/release_38/lib/Target/ARM/ARMInstrInfo.td Sat Apr 2 15:32:54 2016 @@ -279,6 +279,8 @@ def IsARM: Predicate<"!Subta def IsMachO : Predicate<"Subtarget->isTargetMachO()">; def IsNotMachO : Predicate<"!Subtarget->isTargetMachO()">; def IsNaCl : Predicate<"Subtarget->isTargetNaCl()">; +def IsWindows: Predicate<"Subtarget->isTargetWindows()">; +def IsNotWindows : Predicate<"!Subtarget->isTargetWindows()">; def UseNaClTrap : Predicate<"Subtarget->useNaClTrap()">, AssemblerPredicate<"FeatureNaClTrap", "NaCl">; def DontUseNaClTrap : Predicate<"!Subtarget->useNaClTrap()">; Modified: llvm/branches/release_38/lib/Target/ARM/ARMInstrThumb.td URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/lib/Target/ARM/ARMInstrThumb.td?rev=265244&r1=265243&r2=265244&view=diff == --- llvm/branches/release_38/lib/Target/ARM/ARMInstrThumb.td (original) +++ llvm/branches/release_38/lib/Target/ARM/ARMInstrThumb.td Sat Apr 2 15:32:54 2016 @@ -1310,7 +1310,14 @@ def tInt_eh_sjlj_longjmp : XI<(outs), (i AddrModeNone, 0, IndexModeNone, Pseudo, NoItinerary, "", "", [(ARMeh_sjlj_longjmp GPR:$src, GPR:$scratch)]>, - Requires<[IsThumb]>; + Requires<[IsThumb,IsNotWindows]>; + +let isBarrier = 1, hasSideEffects = 1, isTerminator = 1, isCodeGenOnly = 1, +Defs = [ R11, LR, SP ] in +def tInt_WIN_eh_sjlj_longjmp + : XI<(outs), (ins GPR:$src, GPR:$scratch), AddrModeNone, 0, IndexModeNone, + Pseudo, NoItinerary, "", "", [(ARMeh_sjlj_longjmp GPR:$src, GPR:$scratch)]>, +Requires<[IsThumb,IsWindows]>; //===--===// // Non-Instruction Patterns Modified: llvm/branches/release_38/test/CodeGen/ARM/Windows/builtin_longjmp.ll URL: http://llvm.org/viewvc/llvm-project/llv
[llvm-branch-commits] [llvm-branch] r265245 - Merging r263714: ARM: Revert SVN r253865, 254158, fix windows division
Author: rengolin Date: Sat Apr 2 15:36:55 2016 New Revision: 265245 URL: http://llvm.org/viewvc/llvm-project?rev=265245&view=rev Log: Merging r263714: ARM: Revert SVN r253865, 254158, fix windows division Added: llvm/branches/release_38/test/CodeGen/ARM/Windows/dbzchk.ll Removed: llvm/branches/release_38/test/CodeGen/ARM/Windows/overflow.ll Modified: llvm/branches/release_38/lib/Target/ARM/ARMISelLowering.cpp llvm/branches/release_38/test/CodeGen/ARM/Windows/division.ll Modified: llvm/branches/release_38/lib/Target/ARM/ARMISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/lib/Target/ARM/ARMISelLowering.cpp?rev=265245&r1=265244&r2=265245&view=diff == --- llvm/branches/release_38/lib/Target/ARM/ARMISelLowering.cpp (original) +++ llvm/branches/release_38/lib/Target/ARM/ARMISelLowering.cpp Sat Apr 2 15:36:55 2016 @@ -390,10 +390,6 @@ ARMTargetLowering::ARMTargetLowering(con { RTLIB::SINTTOFP_I64_F64, "__i64tod", CallingConv::ARM_AAPCS_VFP }, { RTLIB::UINTTOFP_I64_F32, "__u64tos", CallingConv::ARM_AAPCS_VFP }, { RTLIB::UINTTOFP_I64_F64, "__u64tod", CallingConv::ARM_AAPCS_VFP }, - { RTLIB::SDIV_I32, "__rt_sdiv", CallingConv::ARM_AAPCS_VFP }, - { RTLIB::UDIV_I32, "__rt_udiv", CallingConv::ARM_AAPCS_VFP }, - { RTLIB::SDIV_I64, "__rt_sdiv64", CallingConv::ARM_AAPCS_VFP }, - { RTLIB::UDIV_I64, "__rt_udiv64", CallingConv::ARM_AAPCS_VFP }, }; for (const auto &LC : LibraryCalls) { @@ -780,6 +776,14 @@ ARMTargetLowering::ARMTargetLowering(con setOperationAction(ISD::UDIV, MVT::i32, LibCall); } + if (Subtarget->isTargetWindows() && !Subtarget->hasDivide()) { +setOperationAction(ISD::SDIV, MVT::i32, Custom); +setOperationAction(ISD::UDIV, MVT::i32, Custom); + +setOperationAction(ISD::SDIV, MVT::i64, Custom); +setOperationAction(ISD::UDIV, MVT::i64, Custom); + } + setOperationAction(ISD::SREM, MVT::i32, Expand); setOperationAction(ISD::UREM, MVT::i32, Expand); // Register based DivRem for AEABI (RTABI 4.2) @@ -6956,8 +6960,14 @@ SDValue ARMTargetLowering::LowerOperatio case ISD::CONCAT_VECTORS: return LowerCONCAT_VECTORS(Op, DAG); case ISD::FLT_ROUNDS_: return LowerFLT_ROUNDS_(Op, DAG); case ISD::MUL: return LowerMUL(Op, DAG); - case ISD::SDIV: return LowerSDIV(Op, DAG); - case ISD::UDIV: return LowerUDIV(Op, DAG); + case ISD::SDIV: +if (Subtarget->isTargetWindows()) + return LowerDIV_Windows(Op, DAG, /* Signed */ true); +return LowerSDIV(Op, DAG); + case ISD::UDIV: +if (Subtarget->isTargetWindows()) + return LowerDIV_Windows(Op, DAG, /* Signed */ false); +return LowerUDIV(Op, DAG); case ISD::ADDC: case ISD::ADDE: case ISD::SUBC: @@ -7947,7 +7957,7 @@ ARMTargetLowering::EmitLowered__dbzchk(M MF->push_back(ContBB); ContBB->splice(ContBB->begin(), MBB, std::next(MachineBasicBlock::iterator(MI)), MBB->end()); - MBB->addSuccessor(ContBB); + ContBB->transferSuccessorsAndUpdatePHIs(MBB); MachineBasicBlock *TrapBB = MF->CreateMachineBasicBlock(); MF->push_back(TrapBB); @@ -7957,6 +7967,7 @@ ARMTargetLowering::EmitLowered__dbzchk(M BuildMI(*MBB, MI, DL, TII->get(ARM::tCBZ)) .addReg(MI->getOperand(0).getReg()) .addMBB(TrapBB); + MBB->addSuccessor(ContBB); MI->eraseFromParent(); return ContBB; Added: llvm/branches/release_38/test/CodeGen/ARM/Windows/dbzchk.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/test/CodeGen/ARM/Windows/dbzchk.ll?rev=265245&view=auto == --- llvm/branches/release_38/test/CodeGen/ARM/Windows/dbzchk.ll (added) +++ llvm/branches/release_38/test/CodeGen/ARM/Windows/dbzchk.ll Sat Apr 2 15:36:55 2016 @@ -0,0 +1,80 @@ +; RUN: llc -mtriple thumbv7--windows-itanium -print-machineinstrs=expand-isel-pseudos -o /dev/null %s 2>&1 | FileCheck %s -check-prefix CHECK-DIV + +; int f(int n, int d) { +; if (n / d) +; return 1; +; return 0; +; } + +define arm_aapcs_vfpcc i32 @f(i32 %n, i32 %d) { +entry: + %retval = alloca i32, align 4 + %n.addr = alloca i32, align 4 + %d.addr = alloca i32, align 4 + store i32 %n, i32* %n.addr, align 4 + store i32 %d, i32* %d.addr, align 4 + %0 = load i32, i32* %n.addr, align 4 + %1 = load i32, i32* %d.addr, align 4 + %div = sdiv i32 %0, %1 + %tobool = icmp ne i32 %div, 0 + br i1 %tobool, label %if.then, label %if.end + +if.then: + store i32 1, i32* %retval, align 4 + br label %return + +if.end: + store i32 0, i32* %retval, align 4 + br label %return + +return: + %2 = load i32, i32* %retval, align 4 + ret i32 %2 +} + +; CHECK-DIV-DAG: BB#0 +; CHECK-DIV-DAG: Successors according to CFG: BB#5({{.*}}) BB#4 +; CHECK-DIV-DAG: BB#1 +; CHECK-DIV-DAG: Successors according to CFG: BB#3 +; CHECK-DIV-DAG: BB#2 +; CHECK-DIV-