Source: llvm-toolchain-3.9 Version: 1:3.9.1-9 Severity: important Tags: upstream patch
Dear Maintainer, LLVM 3.9 cannot compile rustc 1.17.0 on armhf, one needs to apply this patch (already in LLVM trunk): https://reviews.llvm.org/D31265 It is attached as a debdiff for your convenience. For more info see: https://github.com/rust-lang/llvm/pull/67 https://github.com/rust-lang/rust/issues/41291 (failure on Fedora) https://github.com/rust-lang/rust/issues/42477 (failure on Debian) This may affect other projects besides rustc; I'll leave it to you whether to treat this as RC for stretch. We're not targetting rustc 1.17.0 for stretch so it is not RC for rustc's purposes. X -- System Information: Debian Release: 9.0 APT prefers testing APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'buildd-unstable'), (300, 'unstable'), (100, 'experimental'), (1, 'experimental-debug') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.9.0-3-amd64 (SMP w/4 CPU cores) Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8), LANGUAGE=en_GB:en (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)
diff -Nru llvm-toolchain-3.9-3.9.1/debian/changelog llvm-toolchain-3.9-3.9.1/debian/changelog --- llvm-toolchain-3.9-3.9.1/debian/changelog 2017-06-04 18:04:00.000000000 +0000 +++ llvm-toolchain-3.9-3.9.1/debian/changelog 2017-06-06 12:27:50.000000000 +0000 @@ -1,3 +1,10 @@ +llvm-toolchain-3.9 (1:3.9.1-9.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Fix a rustc armhf SIGILL by backporting upstream D31265. + + -- Ximin Luo <infini...@asachi.debian.org> Tue, 06 Jun 2017 12:27:50 +0000 + llvm-toolchain-3.9 (1:3.9.1-9) unstable; urgency=medium * debian/patches/fix-R_AARCH64_MOVW_UABS_G3-relocation.patch: diff -Nru llvm-toolchain-3.9-3.9.1/debian/patches/rust-0032-Fix-computeKnownBits-for-ARMISD-CMOV.patch llvm-toolchain-3.9-3.9.1/debian/patches/rust-0032-Fix-computeKnownBits-for-ARMISD-CMOV.patch --- llvm-toolchain-3.9-3.9.1/debian/patches/rust-0032-Fix-computeKnownBits-for-ARMISD-CMOV.patch 1970-01-01 00:00:00.000000000 +0000 +++ llvm-toolchain-3.9-3.9.1/debian/patches/rust-0032-Fix-computeKnownBits-for-ARMISD-CMOV.patch 2017-06-06 12:27:50.000000000 +0000 @@ -0,0 +1,70 @@ +From a6fa10c14649c18d299cddf3e823b032460cb6f5 Mon Sep 17 00:00:00 2001 +From: Pirama Arumuga Nainar <pir...@google.com> +Date: Thu, 23 Mar 2017 16:47:47 +0000 +Subject: [PATCH 32/32] Fix computeKnownBits for ARMISD::CMOV + +Summary: +The true and false operands for the CMOV are operands 0 and 1. +ARMISelLowering.cpp::computeKnownBits was looking at operands 1 and 2 +instead. This can cause CMOV instructions to be incorrectly folded into +BFI if value set by the CMOV is another CMOV, whose known bits are +computed incorrectly. + +This patch fixes the issue and adds a test case. + +Reviewers: kristof.beyls, jmolloy + +Subscribers: llvm-commits, aemerson, srhines, rengolin + +Differential Revision: https://reviews.llvm.org/D31265 + +git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298624 91177308-0d34-0410-b5e6-96231b3b80d8 +--- + lib/Target/ARM/ARMISelLowering.cpp | 4 ++-- + test/CodeGen/ARM/no-cmov2bfi.ll | 19 +++++++++++++++++++ + 2 files changed, 21 insertions(+), 2 deletions(-) + create mode 100644 test/CodeGen/ARM/no-cmov2bfi.ll + +diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp +index 4a227a3cd7b..cf98e60c065 100644 +--- a/lib/Target/ARM/ARMISelLowering.cpp ++++ b/lib/Target/ARM/ARMISelLowering.cpp +@@ -10806,8 +10806,8 @@ static void computeKnownBits(SelectionDAG &DAG, SDValue Op, APInt &KnownZero, + if (Op.getOpcode() == ARMISD::CMOV) { + APInt KZ2(KnownZero.getBitWidth(), 0); + APInt KO2(KnownOne.getBitWidth(), 0); +- computeKnownBits(DAG, Op.getOperand(1), KnownZero, KnownOne); +- computeKnownBits(DAG, Op.getOperand(2), KZ2, KO2); ++ computeKnownBits(DAG, Op.getOperand(0), KnownZero, KnownOne); ++ computeKnownBits(DAG, Op.getOperand(1), KZ2, KO2); + + KnownZero &= KZ2; + KnownOne &= KO2; +diff --git a/test/CodeGen/ARM/no-cmov2bfi.ll b/test/CodeGen/ARM/no-cmov2bfi.ll +new file mode 100644 +index 00000000000..c8b51204890 +--- /dev/null ++++ b/test/CodeGen/ARM/no-cmov2bfi.ll +@@ -0,0 +1,19 @@ ++; RUN: llc < %s -mtriple=thumbv7 | FileCheck --check-prefix=CHECK-NOBFI %s ++ ++declare zeroext i1 @dummy() ++ ++define i8 @test(i8 %a1, i1 %c) { ++; CHECK-NOBFI-NOT: bfi ++; CHECK-NOBFI: bl dummy ++; CHECK-NOBFI: cmp r0, #0 ++; CHECK-NOBFI: it ne ++; CHECK-NOBFI: orrne [[REG:r[0-9]+]], [[REG]], #8 ++; CHECK-NOBFI: mov r0, [[REG]] ++ ++ %1 = and i8 %a1, -9 ++ %2 = select i1 %c, i8 %1, i8 %a1 ++ %3 = tail call zeroext i1 @dummy() ++ %4 = or i8 %2, 8 ++ %ret = select i1 %3, i8 %4, i8 %2 ++ ret i8 %ret ++} +-- +2.11.0 + diff -Nru llvm-toolchain-3.9-3.9.1/debian/patches/series llvm-toolchain-3.9-3.9.1/debian/patches/series --- llvm-toolchain-3.9-3.9.1/debian/patches/series 2017-06-04 11:15:58.000000000 +0000 +++ llvm-toolchain-3.9-3.9.1/debian/patches/series 2017-06-06 12:27:50.000000000 +0000 @@ -50,3 +50,4 @@ 857623-allow-opencl-pointer-to-bool.diff add_symbols_versioning.patch fix-R_AARCH64_MOVW_UABS_G3-relocation.patch +rust-0032-Fix-computeKnownBits-for-ARMISD-CMOV.patch