[llvm-branch-commits] [llvm-branch] r143449 - in /llvm/branches/release_30: ./ lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp test/CodeGen/X86/dbg-i128-const.ll

Bill Wendling isanbard at gmail.com
Mon Oct 31 22:08:55 PDT 2011


Author: void
Date: Tue Nov  1 00:08:55 2011
New Revision: 143449

URL: http://llvm.org/viewvc/llvm-project?rev=143449&view=rev
Log:
Merging r143194:
------------------------------------------------------------------------
r143194 | chapuni | 2011-10-28 07:12:22 -0700 (Fri, 28 Oct 2011) | 7 lines

Dwarf: [PR11022] Fix emitting DW_AT_const_value(>i64), to be host-endian-neutral.

Don't assume APInt::getRawData() would hold target-aware endianness nor host-compliant endianness. rawdata[0] holds most lower i64, even on big endian host.

FIXME: Add a testcase for big endian target.

FIXME: Ditto on CompileUnit::addConstantFPValue() ?
------------------------------------------------------------------------

Modified:
    llvm/branches/release_30/   (props changed)
    llvm/branches/release_30/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
    llvm/branches/release_30/test/CodeGen/X86/dbg-i128-const.ll

Propchange: llvm/branches/release_30/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  1 00:08:55 2011
@@ -1,3 +1,3 @@
 /llvm/branches/Apple/Pertwee:110850,110961
 /llvm/branches/type-system-rewrite:133420-134817
-/llvm/trunk:142039,142055,142058,142112,142123,142125,142165,142168,142243,142350,142482,142486,142489,142491-142493,142537,142550,142559,142573-142574,142801,142806,142841,142869,142956,142994,142998,143006,143222,143247,143302,143437
+/llvm/trunk:142039,142055,142058,142112,142123,142125,142165,142168,142243,142350,142482,142486,142489,142491-142493,142537,142550,142559,142573-142574,142801,142806,142841,142869,142956,142994,142998,143006,143194,143222,143247,143302,143437

Modified: llvm/branches/release_30/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_30/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=143449&r1=143448&r2=143449&view=diff
==============================================================================
--- llvm/branches/release_30/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)
+++ llvm/branches/release_30/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Tue Nov  1 00:08:55 2011
@@ -527,18 +527,20 @@
 
   // Get the raw data form of the large APInt.
   const APInt Val = CI->getValue();
-  const char *Ptr = (const char*)Val.getRawData();
+  const uint64_t *Ptr64 = Val.getRawData();
 
   int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
   bool LittleEndian = Asm->getTargetData().isLittleEndian();
-  int Incr = (LittleEndian ? 1 : -1);
-  int Start = (LittleEndian ? 0 : NumBytes - 1);
-  int Stop = (LittleEndian ? NumBytes : -1);
 
   // Output the constant to DWARF one byte at a time.
-  for (; Start != Stop; Start += Incr)
-    addUInt(Block, 0, dwarf::DW_FORM_data1,
-            (unsigned char)0xFF & Ptr[Start]);
+  for (int i = 0; i < NumBytes; i++) {
+    uint8_t c;
+    if (LittleEndian)
+      c = Ptr64[i / 8] >> (8 * (i & 7));
+    else
+      c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
+    addUInt(Block, 0, dwarf::DW_FORM_data1, c);
+  }
 
   addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
   return true;

Modified: llvm/branches/release_30/test/CodeGen/X86/dbg-i128-const.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_30/test/CodeGen/X86/dbg-i128-const.ll?rev=143449&r1=143448&r2=143449&view=diff
==============================================================================
--- llvm/branches/release_30/test/CodeGen/X86/dbg-i128-const.ll (original)
+++ llvm/branches/release_30/test/CodeGen/X86/dbg-i128-const.ll Tue Nov  1 00:08:55 2011
@@ -1,4 +1,4 @@
-; RUN: llc < %s | FileCheck %s
+; RUN: llc -mtriple=x86_64-linux < %s | FileCheck %s
 
 ; CHECK: DW_AT_const_value
 ; CHECK-NEXT: 42





More information about the llvm-branch-commits mailing list