| OLD | NEW |
| 1 //===- subzero/src/PNaClTranslator.cpp - ICE from bitcode -----------------===// | 1 //===- subzero/src/PNaClTranslator.cpp - ICE from bitcode -----------------===// |
| 2 // | 2 // |
| 3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 /// | 9 /// |
| 10 /// \file | 10 /// \file |
| (...skipping 2648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2659 return; | 2659 return; |
| 2660 ParamsStartIndex = 3; | 2660 ParamsStartIndex = 3; |
| 2661 } | 2661 } |
| 2662 | 2662 |
| 2663 // Extract out the called function and its return type. | 2663 // Extract out the called function and its return type. |
| 2664 uint32_t CalleeIndex = convertRelativeToAbsIndex(Values[1], BaseIndex); | 2664 uint32_t CalleeIndex = convertRelativeToAbsIndex(Values[1], BaseIndex); |
| 2665 Ice::Operand *Callee = getOperand(CalleeIndex); | 2665 Ice::Operand *Callee = getOperand(CalleeIndex); |
| 2666 const Ice::FuncSigType *Signature = nullptr; | 2666 const Ice::FuncSigType *Signature = nullptr; |
| 2667 Ice::Type ReturnType = Ice::IceType_void; | 2667 Ice::Type ReturnType = Ice::IceType_void; |
| 2668 const Ice::Intrinsics::FullIntrinsicInfo *IntrinsicInfo = nullptr; | 2668 const Ice::Intrinsics::FullIntrinsicInfo *IntrinsicInfo = nullptr; |
| 2669 // Name of function if a direct call/intrinsic. Null otherwise. |
| 2670 Ice::FunctionDeclaration *Fcn = nullptr; |
| 2669 if (Record.GetCode() == naclbitc::FUNC_CODE_INST_CALL) { | 2671 if (Record.GetCode() == naclbitc::FUNC_CODE_INST_CALL) { |
| 2670 Ice::FunctionDeclaration *Fcn = Context->getFunctionByID(CalleeIndex); | 2672 Fcn = Context->getFunctionByID(CalleeIndex); |
| 2671 Signature = &Fcn->getSignature(); | 2673 Signature = &Fcn->getSignature(); |
| 2672 ReturnType = Signature->getReturnType(); | 2674 ReturnType = Signature->getReturnType(); |
| 2673 | 2675 |
| 2674 // Check if this direct call is to an Intrinsic (starts with "llvm.") | 2676 // Check if this direct call is to an Intrinsic (starts with "llvm.") |
| 2675 bool BadIntrinsic; | 2677 bool BadIntrinsic; |
| 2676 const Ice::IceString &Name = Fcn->getName(); | 2678 const Ice::IceString &Name = Fcn->getName(); |
| 2677 IntrinsicInfo = getTranslator().getContext()->getIntrinsicsInfo().find( | 2679 IntrinsicInfo = getTranslator().getContext()->getIntrinsicsInfo().find( |
| 2678 Name, BadIntrinsic); | 2680 Name, BadIntrinsic); |
| 2679 if (BadIntrinsic) { | 2681 if (BadIntrinsic) { |
| 2680 std::string Buffer; | 2682 std::string Buffer; |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2793 | 2795 |
| 2794 // If intrinsic call, validate call signature. | 2796 // If intrinsic call, validate call signature. |
| 2795 if (IntrinsicInfo) { | 2797 if (IntrinsicInfo) { |
| 2796 Ice::SizeT ArgIndex = 0; | 2798 Ice::SizeT ArgIndex = 0; |
| 2797 switch (IntrinsicInfo->validateCall(Inst.get(), ArgIndex)) { | 2799 switch (IntrinsicInfo->validateCall(Inst.get(), ArgIndex)) { |
| 2798 case Ice::Intrinsics::IsValidCall: | 2800 case Ice::Intrinsics::IsValidCall: |
| 2799 break; | 2801 break; |
| 2800 case Ice::Intrinsics::BadReturnType: { | 2802 case Ice::Intrinsics::BadReturnType: { |
| 2801 std::string Buffer; | 2803 std::string Buffer; |
| 2802 raw_string_ostream StrBuf(Buffer); | 2804 raw_string_ostream StrBuf(Buffer); |
| 2803 StrBuf << "Intrinsic call expects return type " | 2805 StrBuf << "Intrinsic " << Fcn->getName() << " expects return type" |
| 2804 << IntrinsicInfo->getReturnType() | 2806 << IntrinsicInfo->getReturnType() |
| 2805 << ". Found: " << Inst->getReturnType(); | 2807 << ". Found: " << Inst->getReturnType(); |
| 2806 Error(StrBuf.str()); | 2808 Error(StrBuf.str()); |
| 2807 break; | 2809 break; |
| 2808 } | 2810 } |
| 2809 case Ice::Intrinsics::WrongNumOfArgs: { | 2811 case Ice::Intrinsics::WrongNumOfArgs: { |
| 2810 std::string Buffer; | 2812 std::string Buffer; |
| 2811 raw_string_ostream StrBuf(Buffer); | 2813 raw_string_ostream StrBuf(Buffer); |
| 2812 StrBuf << "Intrinsic call expects " << IntrinsicInfo->getNumArgs() | 2814 StrBuf << "Intrinsic " << Fcn->getName() << " expects " |
| 2815 << IntrinsicInfo->getNumArgs() |
| 2813 << ". Found: " << Inst->getNumArgs(); | 2816 << ". Found: " << Inst->getNumArgs(); |
| 2814 Error(StrBuf.str()); | 2817 Error(StrBuf.str()); |
| 2815 break; | 2818 break; |
| 2816 } | 2819 } |
| 2817 case Ice::Intrinsics::WrongCallArgType: { | 2820 case Ice::Intrinsics::WrongCallArgType: { |
| 2818 std::string Buffer; | 2821 std::string Buffer; |
| 2819 raw_string_ostream StrBuf(Buffer); | 2822 raw_string_ostream StrBuf(Buffer); |
| 2820 StrBuf << "Intrinsic call argument " << ArgIndex << " expects type " | 2823 StrBuf << "Intrinsic " << Fcn->getName() << " expects " |
| 2821 << IntrinsicInfo->getArgType(ArgIndex) | 2824 << IntrinsicInfo->getArgType(ArgIndex) << " for argument " |
| 2825 << (ArgIndex + 1) |
| 2822 << ". Found: " << Inst->getArg(ArgIndex)->getType(); | 2826 << ". Found: " << Inst->getArg(ArgIndex)->getType(); |
| 2823 Error(StrBuf.str()); | 2827 Error(StrBuf.str()); |
| 2824 break; | 2828 break; |
| 2825 } | 2829 } |
| 2826 } | 2830 } |
| 2827 } | 2831 } |
| 2828 | 2832 |
| 2829 CurrentNode->appendInst(Inst.release()); | 2833 CurrentNode->appendInst(Inst.release()); |
| 2830 return; | 2834 return; |
| 2831 } | 2835 } |
| (...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3292 raw_string_ostream StrBuf(Buffer); | 3296 raw_string_ostream StrBuf(Buffer); |
| 3293 StrBuf << IRFilename << ": Does not contain a module!"; | 3297 StrBuf << IRFilename << ": Does not contain a module!"; |
| 3294 llvm::report_fatal_error(StrBuf.str()); | 3298 llvm::report_fatal_error(StrBuf.str()); |
| 3295 } | 3299 } |
| 3296 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { | 3300 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { |
| 3297 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); | 3301 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); |
| 3298 } | 3302 } |
| 3299 } | 3303 } |
| 3300 | 3304 |
| 3301 } // end of namespace Ice | 3305 } // end of namespace Ice |
| OLD | NEW |