not-int can also take non-int (byte and short) instructions.
So we should use the result-type instead if the input type
for knowning what instruction to use.
Bug: 19454010
Change-Id: I88782ad27ae8c8e1b7868afede5057d26f14685a
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc
index e864ae1..cda5c1a 100644
--- a/compiler/optimizing/code_generator_arm.cc
+++ b/compiler/optimizing/code_generator_arm.cc
@@ -2478,7 +2478,7 @@
LocationSummary* locations = not_->GetLocations();
Location out = locations->Out();
Location in = locations->InAt(0);
- switch (not_->InputAt(0)->GetType()) {
+ switch (not_->GetResultType()) {
case Primitive::kPrimInt:
__ mvn(out.AsRegister<Register>(), ShifterOperand(in.AsRegister<Register>()));
break;
diff --git a/compiler/optimizing/code_generator_arm64.cc b/compiler/optimizing/code_generator_arm64.cc
index 0d7864f..729bab7 100644
--- a/compiler/optimizing/code_generator_arm64.cc
+++ b/compiler/optimizing/code_generator_arm64.cc
@@ -2202,7 +2202,7 @@
}
void InstructionCodeGeneratorARM64::VisitNot(HNot* instruction) {
- switch (instruction->InputAt(0)->GetType()) {
+ switch (instruction->GetResultType()) {
case Primitive::kPrimInt:
case Primitive::kPrimLong:
__ Mvn(OutputRegister(instruction), InputOperandAt(instruction, 0));
diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc
index 1101569..7b35cfd 100644
--- a/compiler/optimizing/code_generator_x86.cc
+++ b/compiler/optimizing/code_generator_x86.cc
@@ -2575,7 +2575,7 @@
Location in = locations->InAt(0);
Location out = locations->Out();
DCHECK(in.Equals(out));
- switch (not_->InputAt(0)->GetType()) {
+ switch (not_->GetResultType()) {
case Primitive::kPrimInt:
__ notl(out.AsRegister<Register>());
break;
diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc
index 41a19e1..74adb31 100644
--- a/compiler/optimizing/code_generator_x86_64.cc
+++ b/compiler/optimizing/code_generator_x86_64.cc
@@ -2514,7 +2514,7 @@
DCHECK_EQ(locations->InAt(0).AsRegister<CpuRegister>().AsRegister(),
locations->Out().AsRegister<CpuRegister>().AsRegister());
Location out = locations->Out();
- switch (not_->InputAt(0)->GetType()) {
+ switch (not_->GetResultType()) {
case Primitive::kPrimInt:
__ notl(out.AsRegister<CpuRegister>());
break;