Index: src/IceTargetLoweringARM32.cpp |
diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp |
index 4b2dc98ef735465fb561cf2502a69a98df20d84d..10e1dbef4274640f26988afee09c8ba84e5b0e16 100644 |
--- a/src/IceTargetLoweringARM32.cpp |
+++ b/src/IceTargetLoweringARM32.cpp |
@@ -2809,6 +2809,7 @@ void TargetARM32::lowerArithmetic(const InstArithmetic *Instr) { |
case InstArithmetic::Sub: |
case InstArithmetic::And: |
case InstArithmetic::Or: |
+ case InstArithmetic::Xor: |
break; |
} |
} |
@@ -2981,8 +2982,13 @@ void TargetARM32::lowerArithmetic(const InstArithmetic *Instr) { |
} |
case InstArithmetic::Xor: { |
Variable *Src0R = Srcs.src0R(this); |
- Operand *Src1RF = Srcs.src1RF(this); |
- _eor(T, Src0R, Src1RF); |
+ if (isVectorType(DestTy)) { |
+ Variable *Src1R = legalizeToReg(Src1); |
+ _veor(T, Src0R, Src1R); |
+ } else { |
+ Operand *Src1RF = Srcs.src1RF(this); |
+ _eor(T, Src0R, Src1RF); |
+ } |
_mov(Dest, T); |
return; |
} |