Implement copy/const/check_suspend intrinsic for expander.
Change-Id: Ia9dd1d62dee00dd2f172c3a8ba5732e9d3df35aa
diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc
index 8fd6c18..fa8bcea 100644
--- a/src/compiler_llvm/gbc_expander.cc
+++ b/src/compiler_llvm/gbc_expander.cc
@@ -1083,12 +1083,9 @@
case IntrinsicHelper::GetCurrentThread: {
return irb_.Runtime().EmitGetCurrentThread();
}
- case IntrinsicHelper::TestSuspend: {
- Expand_TestSuspend(call_inst);
- return NULL;
- }
+ case IntrinsicHelper::TestSuspend:
case IntrinsicHelper::CheckSuspend: {
- UNIMPLEMENTED(FATAL);
+ Expand_TestSuspend(call_inst);
return NULL;
}
case IntrinsicHelper::MarkGCCard: {
@@ -1955,24 +1952,20 @@
}
//==- Const ------------------------------------------------------------==//
- case greenland::IntrinsicHelper::ConstInt: {
- UNIMPLEMENTED(FATAL);
- return NULL;
- }
- case greenland::IntrinsicHelper::ConstObj: {
- UNIMPLEMENTED(FATAL);
- return NULL;
- }
+ case greenland::IntrinsicHelper::ConstInt:
case greenland::IntrinsicHelper::ConstLong: {
- UNIMPLEMENTED(FATAL);
- return NULL;
+ return call_inst.getArgOperand(0);
}
case greenland::IntrinsicHelper::ConstFloat: {
- UNIMPLEMENTED(FATAL);
- return NULL;
+ return irb_.CreateBitCast(call_inst.getArgOperand(0),
+ irb_.getJFloatTy());
}
case greenland::IntrinsicHelper::ConstDouble: {
- UNIMPLEMENTED(FATAL);
+ return irb_.CreateBitCast(call_inst.getArgOperand(0),
+ irb_.getJDoubleTy());
+ }
+ case greenland::IntrinsicHelper::ConstObj: {
+ LOG(FATAL) << "ConstObj should not occur at all";
return NULL;
}
@@ -1983,25 +1976,15 @@
}
//==- Copy -------------------------------------------------------------==//
- case greenland::IntrinsicHelper::CopyInt: {
- UNIMPLEMENTED(FATAL);
- return NULL;
+ case greenland::IntrinsicHelper::CopyInt:
+ case greenland::IntrinsicHelper::CopyFloat:
+ case greenland::IntrinsicHelper::CopyLong:
+ case greenland::IntrinsicHelper::CopyDouble: {
+ return call_inst.getArgOperand(0);
}
case greenland::IntrinsicHelper::CopyObj: {
- UNIMPLEMENTED(FATAL);
- return NULL;
- }
- case greenland::IntrinsicHelper::CopyFloat: {
- UNIMPLEMENTED(FATAL);
- return NULL;
- }
- case greenland::IntrinsicHelper::CopyLong: {
- UNIMPLEMENTED(FATAL);
- return NULL;
- }
- case greenland::IntrinsicHelper::CopyDouble: {
- UNIMPLEMENTED(FATAL);
- return NULL;
+ // TODO: Update the shadow frame slots.
+ return call_inst.getArgOperand(0);
}
//==- Shift ------------------------------------------------------------==//