Fix run-test 044/064.
Change-Id: Iede43d149aa4712929a1cdc922e2eb2b2734fdd9
diff --git a/src/compiler_llvm/stub_compiler.cc b/src/compiler_llvm/stub_compiler.cc
index d14dd62..46c6f21 100644
--- a/src/compiler_llvm/stub_compiler.cc
+++ b/src/compiler_llvm/stub_compiler.cc
@@ -150,7 +150,24 @@
llvm::Value* code_addr = irb_.CreateLoad(code_field_addr, kTBAAJRuntime);
- llvm::Value* retval = irb_.CreateCall(code_addr, args);
+ llvm::CallInst* retval = irb_.CreateCall(code_addr, args);
+#if defined(ART_USE_QUICK_COMPILER)
+ for (size_t i = 1; i < shorty_size; ++i) {
+ switch(shorty[i]) {
+ case 'Z':
+ case 'C':
+ retval->addAttribute(i + (is_static ? 1 : 2), llvm::Attribute::ZExt);
+ break;
+
+ case 'B':
+ case 'S':
+ retval->addAttribute(i + (is_static ? 1 : 2), llvm::Attribute::SExt);
+ break;
+
+ default: break;
+ }
+ }
+#endif
// Store the returned value
if (shorty[0] != 'V') {
@@ -199,6 +216,21 @@
llvm::Function* func =
llvm::Function::Create(accurate_func_type, llvm::Function::ExternalLinkage,
func_name, module_);
+#if defined(ART_USE_QUICK_COMPILER)
+ switch(shorty[0]) {
+ case 'Z':
+ case 'C':
+ func->addAttribute(0, llvm::Attribute::ZExt);
+ break;
+
+ case 'B':
+ case 'S':
+ func->addAttribute(0, llvm::Attribute::SExt);
+ break;
+
+ default: break;
+ }
+#endif
// Create basic block for the body of this function
llvm::BasicBlock* block_body =