Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: src/IceTargetLoweringARM32.cpp

Issue 1343783003: Subzero. Implements the scalar bitcast operations for ARM32. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments, and merges. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceTargetLoweringARM32.h ('k') | tests_lit/llvm2ice_tests/bitcast.ll » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceTargetLoweringARM32.cpp
diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp
index 3e92637123220274a9f35c7207861d874bce6a4f..0634e452d90e6e340a3b4a54b8a745beba732efe 100644
--- a/src/IceTargetLoweringARM32.cpp
+++ b/src/IceTargetLoweringARM32.cpp
@@ -2108,6 +2108,9 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
UnimplementedError(Func->getContext()->getFlags());
break;
} else if (Dest->getType() == IceType_i64) {
+ split64(Dest);
+ Context.insert(InstFakeDef::create(Func, Dest->getLo()));
+ Context.insert(InstFakeDef::create(Func, Dest->getHi()));
UnimplementedError(Func->getContext()->getFlags());
break;
}
@@ -2144,7 +2147,10 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
if (isVectorType(Dest->getType())) {
UnimplementedError(Func->getContext()->getFlags());
break;
- } else if (Src0->getType() == IceType_i64) {
+ }
+ if (Src0->getType() == IceType_i64) {
+ // avoid cryptic liveness errors
+ Context.insert(InstFakeDef::create(Func, Dest));
UnimplementedError(Func->getContext()->getFlags());
break;
}
@@ -2178,7 +2184,77 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
lowerAssign(Assign);
return;
}
- UnimplementedError(Func->getContext()->getFlags());
+ Type DestType = Dest->getType();
+ switch (DestType) {
+ case IceType_NUM:
+ case IceType_void:
+ llvm::report_fatal_error("Unexpected bitcast.");
+ case IceType_i1:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_v4i1:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_i8:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_i16:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_i32:
+ case IceType_f32: {
+ Variable *Src0R = legalizeToReg(Src0);
+ Variable *T = makeReg(DestType);
+ _vmov(T, Src0R);
+ lowerAssign(InstAssign::create(Func, Dest, T));
+ break;
+ }
+ case IceType_i64: {
+ // t0, t1 <- src0
+ // dest[31..0] = t0
+ // dest[63..32] = t1
+ assert(Src0->getType() == IceType_f64);
+ Variable *T0 = makeReg(IceType_i32);
+ Variable *T1 = makeReg(IceType_i32);
+ Variable *Src0R = legalizeToReg(Src0);
+ split64(Dest);
+ _vmov(InstARM32Vmov::RegisterPair(T0, T1), Src0R);
+ lowerAssign(InstAssign::create(Func, Dest->getLo(), T0));
+ lowerAssign(InstAssign::create(Func, Dest->getHi(), T1));
+ break;
+ }
+ case IceType_f64: {
+ // T0 <- lo(src)
+ // T1 <- hi(src)
+ // vmov T2, T0, T1
+ // Dest <- T2
+ assert(Src0->getType() == IceType_i64);
+ Variable *SrcLo = legalizeToReg(loOperand(Src0));
+ Variable *SrcHi = legalizeToReg(hiOperand(Src0));
+ Variable *T = makeReg(IceType_f64);
+ _vmov(T, InstARM32Vmov::RegisterPair(SrcLo, SrcHi));
+ lowerAssign(InstAssign::create(Func, Dest, T));
+ break;
+ }
+ case IceType_v8i1:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_v16i1:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_v8i16:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_v16i8:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_v4i32:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ case IceType_v4f32:
+ UnimplementedError(Func->getContext()->getFlags());
+ break;
+ }
break;
}
}
« no previous file with comments | « src/IceTargetLoweringARM32.h ('k') | tests_lit/llvm2ice_tests/bitcast.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698