A question about CBackend.cpp

Hi,

I’m reading the code in CBackend.cpp and found some wired chunk in
void CWriter::printConstant(Constant *CPV)

938 if (ConstantInt CI = dyn_cast(CPV)) {
939 const Type
Ty = CI->getType();
940 if (Ty == Type::Int1Ty)
941 Out << (CI->getZExtValue() ? ‘1’ : ‘0’);
942 else if (Ty == Type::Int32Ty)
943 Out << CI->getZExtValue() << ‘u’;
944 else if (Ty->getPrimitiveSizeInBits() > 32)
945 Out << CI->getZExtValue() << “ull”;
946 else {
947 Out << “((”;
948 printSimpleType(Out, Ty, false) << ‘)’;
949 if (CI->isMinValue(true))
950 Out << CI->getZExtValue() << ‘u’;
951 else
952 Out << CI->getSExtValue();
953 Out << ‘)’;
954 }
955 return;
956 }

In line 946 to line 954, the “else” branch is for bitwidth from 2 to 31,
the question is why only for CI is MinValue(true), it is zexted, otherwise sexted.
I’m confused by that logic. Is there some special reason?

Thanks,
Sheng.