[LLVMdev] Fwd: Multiply i8 operands promotes to i32

Pedro Malagón malagon at die.upm.es
Mon Oct 8 07:45:51 PDT 2012


Hi,

I see this is a clang issue, and thanks for the reply. I guess this is
the path I should take right now to avoid to promote and truncate

Thanks,
Pedro

El 08/10/2012 16:10, Borja Ferrer escribió:
> Hello Pedro,
>
> As others have said we're assuming that you're using Clang as the
> frontend, the MSP430TargetInfo class inside lib/Basic/Targets.cpp
> (clang codebase) set ints to be 16 bits wide, so you should get 16bit
> mults straight away without promotion. But anyways for 8bit
> multiplicantions you can do the following to bypass argument promotion:
>
> 1) go to the lib/CodeGen/TargetInfo.cpp (clang codebase)
>
> 2) implement a MSP430ABIInfo class derived from ABIInfo, check how
> other targets do it in the same file. The important part here is how
> you implement the classifyReturnType and classifyArgumentType
> functions, they should basically look like this:
>
> class MSP430ABIInfo : public ABIInfo
> {
> public:
>   MSP430ABIInfo (CodeGenTypes &CGT) : ABIInfo(CGT) {}
>
>   ABIArgInfo classifyReturnType(QualType RetTy) const;
>   ABIArgInfo classifyArgumentType(QualType RetTy) const;
>
>   virtual void computeInfo(CGFunctionInfo &FI) const {
>     FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
>     for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie =
> FI.arg_end();
>          it != ie; ++it)
>       it->info = classifyArgumentType(it->type);
>   }
>
>   virtual llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
>                                  CodeGenFunction &CGF) const { return 0; }
> };
>
> ABIArgInfo MSP430ABIInfo::classifyReturnType(QualType RetTy) const {
>   if (RetTy->isVoidType())
>     return ABIArgInfo::getIgnore();
>   if (isAggregateTypeForABI(RetTy))
>     return ABIArgInfo::getIndirect(0);
>
>   return ABIArgInfo::getDirect();
> }
>
> ABIArgInfo MSP430ABIInfo::classifyArgumentType(QualType Ty) const {
>   if (isAggregateTypeForABI(Ty))
>     return ABIArgInfo::getIndirect(0);
>
>   return ABIArgInfo::getDirect();
> }
>
> 3) Register your new MSP430ABIInfo class in the TargetCodeGenInfo
> constructor inside MSP430TargetCodeGenInfo by replacing DefaultABIInfo.
>
> Hope this helps.
>
>


-- 
Pedro Malagón - Profesor ayudante
91 549 57 00 - ext. 4220
Departamento de Ingeniería Electrónica
Escuela Técnica Superior de Ingenieros de Telecomunicación
Universidad Politécnica de Madrid




More information about the llvm-dev mailing list