[llvm] r243349 - [opaque pointers] Avoid the use of pointee types when parsing inline asm in IR

Duncan P. N. Exon Smith dexonsmith at apple.com
Tue Jul 28 15:58:59 PDT 2015


> On 2015-Jul-27, at 16:32, David Blaikie <dblaikie at gmail.com> wrote:
> 
> Author: dblaikie
> Date: Mon Jul 27 18:32:19 2015
> New Revision: 243349
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=243349&view=rev
> Log:
> [opaque pointers] Avoid the use of pointee types when parsing inline asm in IR
> 
> When parsing calls to inline asm the pointee type (of the pointer type
> representing the value type of the InlineAsm value) was used. To avoid
> using it, use the ValID structure to ferry the FunctionType directly
> through to the InlineAsm construction.
> 
> This is a bit of a workaround - alternatively the inline asm could
> explicitly describe the type but that'd be verbose/redundant in the IR
> and so long as the inline asm calls directly in the context of a call or
> invoke, this should suffice.
> 
> Modified:
>    llvm/trunk/lib/AsmParser/LLParser.cpp
>    llvm/trunk/lib/AsmParser/LLParser.h
> 
> Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=243349&r1=243348&r2=243349&view=diff
> ==============================================================================
> --- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
> +++ llvm/trunk/lib/AsmParser/LLParser.cpp Mon Jul 27 18:32:19 2015
> @@ -3980,13 +3980,12 @@ bool LLParser::ConvertValIDToValue(Type
>     V = PFS->GetVal(ID.StrVal, Ty, ID.Loc);
>     return V == nullptr;
>   case ValID::t_InlineAsm: {
> -    PointerType *PTy = dyn_cast<PointerType>(Ty);
> -    FunctionType *FTy =
> -      PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : nullptr;
> -    if (!FTy || !InlineAsm::Verify(FTy, ID.StrVal2))
> +    assert(ID.FTy);

It's not clear to me why this should be an assert instead of an Error
after your code change, unless it should have been an assert before?
Was it already guaranteed?

> +    if (!InlineAsm::Verify(ID.FTy, ID.StrVal2))
>       return Error(ID.Loc, "invalid type for inline asm constraint string");
> -    V = InlineAsm::get(FTy, ID.StrVal, ID.StrVal2, ID.UIntVal&1,
> -                       (ID.UIntVal>>1)&1, (InlineAsm::AsmDialect(ID.UIntVal>>2)));
> +    V = InlineAsm::get(ID.FTy, ID.StrVal, ID.StrVal2, ID.UIntVal & 1,
> +                       (ID.UIntVal >> 1) & 1,
> +                       (InlineAsm::AsmDialect(ID.UIntVal >> 2)));
>     return false;
>   }
>   case ValID::t_GlobalName:
> @@ -4864,6 +4863,8 @@ bool LLParser::ParseInvoke(Instruction *
>     Ty = FunctionType::get(RetType, ParamTypes, false);
>   }
> 
> +  CalleeID.FTy = Ty;
> +
>   // Look up the callee.
>   Value *Callee;
>   if (ConvertValIDToValue(PointerType::getUnqual(Ty), CalleeID, Callee, &PFS))
> @@ -5277,6 +5278,8 @@ bool LLParser::ParseCall(Instruction *&I
>     Ty = FunctionType::get(RetType, ParamTypes, false);
>   }
> 
> +  CalleeID.FTy = Ty;
> +
>   // Look up the callee.
>   Value *Callee;
>   if (ConvertValIDToValue(PointerType::getUnqual(Ty), CalleeID, Callee, &PFS))
> 
> Modified: llvm/trunk/lib/AsmParser/LLParser.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=243349&r1=243348&r2=243349&view=diff
> ==============================================================================
> --- llvm/trunk/lib/AsmParser/LLParser.h (original)
> +++ llvm/trunk/lib/AsmParser/LLParser.h Mon Jul 27 18:32:19 2015
> @@ -52,13 +52,14 @@ namespace llvm {
>       t_Null, t_Undef, t_Zero,    // No value.
>       t_EmptyArray,               // No value:  []
>       t_Constant,                 // Value in ConstantVal.
> -      t_InlineAsm,                // Value in StrVal/StrVal2/UIntVal.
> +      t_InlineAsm,                // Value in FTy/StrVal/StrVal2/UIntVal.
>       t_ConstantStruct,           // Value in ConstantStructElts.
>       t_PackedConstantStruct      // Value in ConstantStructElts.
>     } Kind;
> 
>     LLLexer::LocTy Loc;
>     unsigned UIntVal;
> +    FunctionType *FTy;
>     std::string StrVal, StrVal2;
>     APSInt APSIntVal;
>     APFloat APFloatVal;
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list