[llvm] r339784 - [RegAlloc] Check that subreg liveness tracking applies to given virtual reg

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 15 09:07:47 PDT 2018


Author: kparzysz
Date: Wed Aug 15 09:07:47 2018
New Revision: 339784

URL: http://llvm.org/viewvc/llvm-project?rev=339784&view=rev
Log:
[RegAlloc] Check that subreg liveness tracking applies to given virtual reg

Subregister liveness applies selectively to register classes with certain
properties. Make sure that when it's enabled, it applies to a given virtual
register (in virtual register rewriter).

Added:
    llvm/trunk/test/CodeGen/SystemZ/subregliveness-02.ll
Modified:
    llvm/trunk/lib/CodeGen/VirtRegMap.cpp

Modified: llvm/trunk/lib/CodeGen/VirtRegMap.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/VirtRegMap.cpp?rev=339784&r1=339783&r2=339784&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/VirtRegMap.cpp (original)
+++ llvm/trunk/lib/CodeGen/VirtRegMap.cpp Wed Aug 15 09:07:47 2018
@@ -525,7 +525,7 @@ void VirtRegRewriter::rewrite() {
         // Preserve semantics of sub-register operands.
         unsigned SubReg = MO.getSubReg();
         if (SubReg != 0) {
-          if (NoSubRegLiveness) {
+          if (NoSubRegLiveness || !MRI->shouldTrackSubRegLiveness(VirtReg)) {
             // A virtual register kill refers to the whole register, so we may
             // have to add implicit killed operands for the super-register.  A
             // partial redef always kills and redefines the super-register.

Added: llvm/trunk/test/CodeGen/SystemZ/subregliveness-02.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SystemZ/subregliveness-02.ll?rev=339784&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/SystemZ/subregliveness-02.ll (added)
+++ llvm/trunk/test/CodeGen/SystemZ/subregliveness-02.ll Wed Aug 15 09:07:47 2018
@@ -0,0 +1,22 @@
+; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 -systemz-subreg-liveness < %s | FileCheck %s
+
+; Check for successful compilation.
+; CHECK: meeb %f0, 0(%r1)
+
+target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"
+target triple = "s390x-ibm-linux"
+
+; Function Attrs: nounwind
+define void @spec_random_load() #0 {
+bb:
+  %tmp = sitofp i64 undef to float
+  %tmp1 = fmul float %tmp, 0x3E00000000000000
+  %tmp2 = fpext float %tmp1 to double
+  %tmp3 = fmul double %tmp2, 2.560000e+02
+  %tmp4 = fptosi double %tmp3 to i32
+  %tmp5 = trunc i32 %tmp4 to i8
+  store i8 %tmp5, i8* undef, align 1
+  unreachable
+}
+
+attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="z13" "target-features"="+transactional-execution,+vector" "unsafe-fp-math"="false" "use-soft-float"="false" }




More information about the llvm-commits mailing list