[LLVMdev] Tablegen bug???

Relph, Richard Richard.Relph at amd.com
Thu Nov 29 18:52:19 PST 2012


    Should tablegen detect this as an error, or is it documented as a limitation somewhere that we've missed?

    In the tablegen-generated file AMDILGenIntrinsics.inc, we have a bunch of if statements comparing strings, many of which are dead, preventing correct recognition of some intrinsics in the their text form. I'm not quite sure what GET_FUNCTION_RECOGNIZER is used for, but if it's used, it's broken… ;-)

    Here's a small segment:

// Function name -> enum value recognizer code.
#ifdef GET_FUNCTION_RECOGNIZER
 StringRef NameR(Name+6, Len-6);   // Skip over 'llvm.'
 switch (Name[5]) {                  // Dispatch on first letter.
 default: break;
 case 'A':
…
   if (NameR.startswith("MDIL.barrier.")) return AMDILIntrinsic::AMDIL_barrier;
   if (NameR.startswith("MDIL.barrier.global.")) return AMDILIntrinsic::AMDIL_barrier_global;
   if (NameR.startswith("MDIL.barrier.local.")) return AMDILIntrinsic::AMDIL_barrier_local;
   if (NameR.startswith("MDIL.barrier.region.")) return AMDILIntrinsic::AMDIL_barrier_region;
…
   if (NameR.startswith("MDIL.fma.")) return AMDILIntrinsic::AMDIL_fma;
   if (NameR.startswith("MDIL.fma.rte.")) return AMDILIntrinsic::AMDIL_fma_rte;
   if (NameR.startswith("MDIL.fma.rtn.")) return AMDILIntrinsic::AMDIL_fma_rtn;
   if (NameR.startswith("MDIL.fma.rtp.")) return AMDILIntrinsic::AMDIL_fma_rtp;
   if (NameR.startswith("MDIL.fma.rtz.")) return AMDILIntrinsic::AMDIL_fma_rtz;
…
   and several other similar instances.




More information about the llvm-dev mailing list