diff --git a/llvm/unittests/Support/TargetParserTest.cpp b/llvm/unittests/Support/TargetParserTest.cpp --- a/llvm/unittests/Support/TargetParserTest.cpp +++ b/llvm/unittests/Support/TargetParserTest.cpp @@ -9,6 +9,7 @@ #include "llvm/Support/TargetParser.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/ARMBuildAttributes.h" +#include "llvm/Support/raw_ostream.h" #include "gtest/gtest.h" #include @@ -31,6 +32,18 @@ "iwmmxt2", "xscale", "armv8.1-m.main", }; +void printDifferingBits(uint64_t a, uint64_t b) +{ + llvm::errs() << "Differing bits are:"; + uint64_t bit = 1; + for (int i = 0; i < 64; i++) { + if ((a & bit) != (b & bit)) + llvm::errs() << " " << i; + bit <<= 1; + } + llvm::errs() << "\n"; +} + bool testARMCPU(StringRef CPUName, StringRef ExpectedArch, StringRef ExpectedFPU, uint64_t ExpectedFlags, StringRef CPUAttr) { @@ -40,10 +53,22 @@ pass &= ARM::getFPUName(FPUKind).equals(ExpectedFPU); uint64_t ExtKind = ARM::getDefaultExtensions(CPUName, AK); - if (ExtKind > 1 && (ExtKind & ARM::AEK_NONE)) + if (ExtKind > 1 && (ExtKind & ARM::AEK_NONE)) { pass &= ((ExtKind ^ ARM::AEK_NONE) == ExpectedFlags); - else + if (!pass) { + llvm::errs() << "ExpectedFlags = " << ExpectedFlags + << " do not equal ExtKind = " << ExtKind + << "in the ARM::AEK_NONE case. " << "\n"; + printDifferingBits(ExtKind, ExpectedFlags); + } + } else { pass &= (ExtKind == ExpectedFlags); + if (!pass) { + llvm::errs() << "ExpectedFlags = " << ExpectedFlags + << " do not equal ExtKind = " << ExtKind << "\n"; + printDifferingBits(ExtKind, ExpectedFlags); + } + } pass &= ARM::getCPUAttr(AK).equals(CPUAttr); return pass; @@ -807,11 +832,22 @@ bool pass = AArch64::getArchName(AK).equals(ExpectedArch); uint64_t ExtKind = AArch64::getDefaultExtensions(CPUName, AK); - if (ExtKind > 1 && (ExtKind & AArch64::AEK_NONE)) + if (ExtKind > 1 && (ExtKind & AArch64::AEK_NONE)) { pass &= ((ExtKind ^ AArch64::AEK_NONE) == ExpectedFlags); - else + if (!pass) { + llvm::errs() << "ExpectedFlags = 0x" << ExpectedFlags + << " do not equal ExtKind = 0x" << ExtKind + << "in the ARM::AEK_NONE case. " << "\n"; + printDifferingBits(ExtKind, ExpectedFlags); + } + } else { pass &= (ExtKind == ExpectedFlags); - + if (!pass) { + llvm::errs() << "ExpectedFlags = 0x" << ExpectedFlags + << " do not equal ExtKind = 0x" << ExtKind << "\n"; + printDifferingBits(ExtKind, ExpectedFlags); + } + } pass &= AArch64::getCPUAttr(AK).equals(CPUAttr); return pass;