LargeRet = true;
return getNaturalAlignIndirect(Ty);
}
+ // An i8 return value should not be extended to i16, since AVR has 8-bit
+ // registers.
+ if (Ty->isIntegralOrEnumerationType() && getContext().getTypeSize(Ty) <= 8)
+ return ABIArgInfo::getDirect();
// Otherwise we follow the default way which is compatible.
return DefaultABIInfo::classifyReturnType(Ty);
}
return __builtin_bitreverse8(data);
}
-// CHECK: define{{.*}} zeroext i8 @bitrev8
+// CHECK: define{{.*}} i8 @bitrev8
// CHECK: i8 @llvm.bitreverse.i8(i8
unsigned int bitrev16(unsigned int data) {
return __builtin_rotateleft8(x, y);
}
-// CHECK: define{{.*}} zeroext i8 @rotleft8
+// CHECK: define{{.*}} i8 @rotleft8
// CHECK: i8 @llvm.fshl.i8(i8
unsigned int rotleft16(unsigned int x, unsigned int y) {
return __builtin_rotateright8(x, y);
}
-// CHECK: define{{.*}} zeroext i8 @rotright8
+// CHECK: define{{.*}} i8 @rotright8
// CHECK: i8 @llvm.fshr.i8(i8
unsigned int rotright16(unsigned int x, unsigned int y) {