mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Operand of asm("call") (the callee function) is represented
as "X" constraint and "P" modifier on x86. Make this work. (Change may not be sufficient to fix it for non-Darwin, but I'm pretty sure it won't break anything.) gcc.apple/asm-block-32.c gcc.apple/asm-block-33.c git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74967 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -2405,11 +2405,24 @@ void TargetLowering::ComputeConstraintToUse(AsmOperandInfo &OpInfo, | ||||
|    | ||||
|   // 'X' matches anything. | ||||
|   if (OpInfo.ConstraintCode == "X" && OpInfo.CallOperandVal) { | ||||
|     // Look through bitcasts over functions.  In the context of an asm | ||||
|     // argument we don't care about bitcasting function types; the parameters | ||||
|     // to the function, if any, will have been handled elsewhere. | ||||
|     Value *v = OpInfo.CallOperandVal; | ||||
|     ConstantExpr *CE = NULL; | ||||
|     while ((CE = dyn_cast<ConstantExpr>(v)) && | ||||
|            CE->getOpcode()==Instruction::BitCast) | ||||
|       v = CE->getOperand(0); | ||||
|     if (!isa<Function>(v)) | ||||
|       v = OpInfo.CallOperandVal; | ||||
|     // Labels and constants are handled elsewhere ('X' is the only thing | ||||
|     // that matches labels). | ||||
|     if (isa<BasicBlock>(OpInfo.CallOperandVal) || | ||||
|         isa<ConstantInt>(OpInfo.CallOperandVal)) | ||||
|     // that matches labels).  For Functions, the type here is the type of | ||||
|     // the result, which is not what we want to look at; leave them alone | ||||
|     // (minus any bitcasts). | ||||
|     if (isa<BasicBlock>(v) || isa<ConstantInt>(v) || isa<Function>(v)) { | ||||
|       OpInfo.CallOperandVal = v; | ||||
|       return; | ||||
|     } | ||||
|      | ||||
|     // Otherwise, try to resolve it to something we know about by looking at | ||||
|     // the actual operand type. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user