[llvm-commits] [llvm] r133940 - in /llvm/trunk: include/llvm/Target/ utils/TableGen/

Francois Pichet pichet2000 at gmail.com
Wed Jun 29 01:56:31 PDT 2011


On Mon, Jun 27, 2011 at 5:06 PM, Owen Anderson <resistor at mac.com> wrote:
> Author: resistor
> Date: Mon Jun 27 16:06:21 2011
> New Revision: 133940
>
> URL: http://llvm.org/viewvc/llvm-project?rev=133940&view=rev
> Log:
> Add support for alternative register names, useful for instructions whose operands are logically equivalent to existing registers, but happen to be printed specially.  For example, an instruciton that prints d0[0] instead of s0.
> Patch by Jim Grosbach.
>
> Modified:
>    llvm/trunk/include/llvm/Target/Target.td
>    llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp
>    llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
>    llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
>    llvm/trunk/utils/TableGen/CodeGenInstruction.cpp
>    llvm/trunk/utils/TableGen/CodeGenTarget.cpp
>    llvm/trunk/utils/TableGen/CodeGenTarget.h
>    llvm/trunk/utils/TableGen/DAGISelMatcherGen.cpp
>    llvm/trunk/utils/TableGen/FastISelEmitter.cpp
>    llvm/trunk/utils/TableGen/FixedLenDecoderEmitter.cpp
>    llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp
>    llvm/trunk/utils/TableGen/Record.cpp
>    llvm/trunk/utils/TableGen/Record.h
>    llvm/trunk/utils/TableGen/RegisterInfoEmitter.cpp
>

I am not sure if this commit is to blame but it seems to be the most probable.
There is a huge regression on MSVC since last Monday with over 300
failing tests.

Seems like X86GenAsmWriter.inc is generated with some invalid data on MSVC.
I copied X86GenAsmWriter.inc from my Mac to my PC and the failing test
went from 300+ to only 4.

So I did a diff between X86GenAsmWriter.inc (PC and Mac) and I saw
some difference in X86ATTInstPrinter::getRegisterName()

PC Version:
===========================================================
const char *X86ATTInstPrinter::getRegisterName(unsigned RegNo) {
  assert(RegNo && RegNo < 160 && "Invalid register number!");

  static const unsigned RegAsmOffset[] = {
    0, 3, 6, 9, 3, 12, 15, 6, 9, 3, 19, 23, 27, 31,
    35, 39, 43, 47, 51, 55, 59, 64, 69, 74, 79, 84, 89, 6,
    9, 92, 95, 3, 19, 23, 27, 31, 35, 39, 43, 47, 89, 6,
    99, 103, 107, 111, 115, 119, 123, 129, 133, 89, 137, 141, 145, 149,
    153, 157, 161, 165, 169, 89, 89, 12, 173, 177, 181, 185, 189, 193,
    197, 201, 205, 208, 212, 216, 220, 223, 227, 231, 235, 239, 244, 249,
    254, 258, 263, 268, 273, 277, 282, 287, 292, 296, 301, 306, 311, 315,
    320, 325, 330, 334, 339, 344, 99, 103, 107, 111, 115, 119, 129, 133,
    137, 141, 92, 95, 12, 15, 89, 349, 355, 361, 367, 373, 379, 385,
    391, 397, 402, 407, 412, 417, 422, 427, 432, 437, 442, 447, 453, 459,
    465, 471, 477, 397, 402, 407, 412, 417, 422, 427, 432, 437, 442, 447,
    453, 459, 465, 471, 477, 0
  };

  const char *AsmStrs =
    "\000h\000\000l\000\000x\000\000h\000\000p\000\000pl\000\000r0\000\000r1"
    "\000\000r2\000\000r3\000\000r4\000\000r5\000\000r6\000\000r7\000\000r8\000"
    "\000r9\000\000r10\000\000r11\000\000r12\000\000r13\000\000r14\000\000r1"
    "5\000\000s\000\000i\000\000il\000\000ax\000\000bp\000\000bx\000\000cx\000"
    "\000di\000\000dx\000\000lags\000\000ip\000\000iz\000\000si\000\000sp\000"
    "\000p0\000\000p1\000\000p2\000\000p3\000\000p4\000\000p5\000\000p6\000\000"
    "m0\000\000m1\000\000m2\000\000m3\000\000m4\000\000m5\000\000m6\000\000m"
    "7\000\0008\000\0008b\000\0008d\000\0008w\000\0009\000\0009b\000\0009d\000"
    "\0009w\000\00010\000\00010b\000\00010d\000\00010w\000\00011\000\00011b\000"
    "\00011d\000\00011w\000\00012\000\00012b\000\00012d\000\00012w\000\00013"
    "\000\00013b\000\00013d\000\00013w\000\00014\000\00014b\000\00014d\000\000"
    "14w\000\00015\000\00015b\000\00015d\000\00015w\000\000t(0)\000\000t(1)\000"
    "\000t(2)\000\000t(3)\000\000t(4)\000\000t(5)\000\000t(6)\000\000t(7)\000"
    "\000mm0\000\000mm1\000\000mm2\000\000mm3\000\000mm4\000\000mm5\000\000m"
    "m6\000\000mm7\000\000mm8\000\000mm9\000\000mm10\000\000mm11\000\000mm12"
    "\000\000mm13\000\000mm14\000\000mm15\000";
  assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
          "Invalid alt name index for register!");
  return AsmStrs+RegAsmOffset[RegNo-1];
}
====================================================================

Mac version:
=====================================================================

const char *X86ATTInstPrinter::getRegisterName(unsigned RegNo) {
  assert(RegNo && RegNo < 160 && "Invalid register number!");

  static const unsigned RegAsmOffset[] = {
    0, 3, 6, 9, 12, 15, 18, 22, 25, 28, 31, 35, 39, 43,
    47, 51, 55, 59, 63, 67, 71, 76, 81, 86, 91, 96, 101, 104,
    107, 110, 113, 117, 120, 124, 128, 132, 136, 140, 144, 148, 152, 155,
    158, 162, 166, 170, 174, 178, 182, 188, 192, 196, 199, 203, 207, 211,
    215, 219, 223, 227, 231, 235, 238, 241, 244, 248, 252, 256, 260, 264,
    268, 272, 276, 279, 283, 287, 291, 294, 298, 302, 306, 310, 315, 320,
    325, 329, 334, 339, 344, 348, 353, 358, 363, 367, 372, 377, 382, 386,
    391, 396, 401, 405, 410, 415, 420, 424, 428, 432, 436, 440, 444, 448,
    452, 456, 460, 463, 467, 470, 474, 477, 483, 489, 495, 501, 507, 513,
    519, 525, 530, 535, 540, 545, 550, 555, 560, 565, 570, 575, 581, 587,
    593, 599, 605, 611, 616, 621, 626, 631, 636, 641, 646, 651, 656, 661,
    667, 673, 679, 685, 691, 0
  };

  const char *AsmStrs =
    "ah\000al\000ax\000bh\000bl\000bp\000bpl\000bx\000ch\000cl\000cr0\000cr1"
    "\000cr2\000cr3\000cr4\000cr5\000cr6\000cr7\000cr8\000cr9\000cr10\000cr1"
    "1\000cr12\000cr13\000cr14\000cr15\000cs\000cx\000dh\000di\000dil\000dl\000"
    "dr0\000dr1\000dr2\000dr3\000dr4\000dr5\000dr6\000dr7\000ds\000dx\000eax"
    "\000ebp\000ebx\000ecx\000edi\000edx\000flags\000eip\000eiz\000es\000esi"
    "\000esp\000fp0\000fp1\000fp2\000fp3\000fp4\000fp5\000fp6\000fs\000gs\000"
    "ip\000mm0\000mm1\000mm2\000mm3\000mm4\000mm5\000mm6\000mm7\000r8\000r8b"
    "\000r8d\000r8w\000r9\000r9b\000r9d\000r9w\000r10\000r10b\000r10d\000r10"
    "w\000r11\000r11b\000r11d\000r11w\000r12\000r12b\000r12d\000r12w\000r13\000"
    "r13b\000r13d\000r13w\000r14\000r14b\000r14d\000r14w\000r15\000r15b\000r"
    "15d\000r15w\000rax\000rbp\000rbx\000rcx\000rdi\000rdx\000rip\000riz\000"
    "rsi\000rsp\000si\000sil\000sp\000spl\000ss\000st(0)\000st(1)\000st(2)\000"
    "st(3)\000st(4)\000st(5)\000st(6)\000st(7)\000xmm0\000xmm1\000xmm2\000xm"
    "m3\000xmm4\000xmm5\000xmm6\000xmm7\000xmm8\000xmm9\000xmm10\000xmm11\000"
    "xmm12\000xmm13\000xmm14\000xmm15\000ymm0\000ymm1\000ymm2\000ymm3\000ymm"
    "4\000ymm5\000ymm6\000ymm7\000ymm8\000ymm9\000ymm10\000ymm11\000ymm12\000"
    "ymm13\000ymm14\000ymm15\000";
  assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
          "Invalid alt name index for register!");
  return AsmStrs+RegAsmOffset[RegNo-1];
}
====================================================================


any ideas?
Thanks to chapuni who helped with investigation.




More information about the llvm-commits mailing list