Index: src/IceTargetLoweringX8632Traits.h |
diff --git a/src/IceTargetLoweringX8632Traits.h b/src/IceTargetLoweringX8632Traits.h |
index 00ea2d91cce1de6df2b2c935b27d5e3c9af07b77..ab22bfdbe16c36b364a88897bbe26df600625b4f 100644 |
--- a/src/IceTargetLoweringX8632Traits.h |
+++ b/src/IceTargetLoweringX8632Traits.h |
@@ -364,8 +364,19 @@ struct TargetX8632Traits { |
assert(RegNum != Variable::NoRegister); |
// TODO(stichnot): Rewrite this as a table lookup from a table computed in a |
// TargetLowering static initializer. |
+ // [abcd]h registers are not convertible to their ?l, ?x, and e?x versions. |
+ switch (RegNum) { |
+ default: |
+ break; |
+ case RegisterSet::Reg_ah: |
+ case RegisterSet::Reg_bh: |
+ case RegisterSet::Reg_ch: |
+ case RegisterSet::Reg_dh: |
+ assert(isByteSizedType(Ty)); |
+ return RegNum; |
+ } |
RegNum = getBaseReg(RegNum); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedType(Ty)) { |
switch (RegNum) { |
default: |
assert(0); |