diff options
Diffstat (limited to 'llvm/unittests')
-rw-r--r-- | llvm/unittests/ADT/StringRefTest.cpp | 13 | ||||
-rw-r--r-- | llvm/unittests/Analysis/MemorySSATest.cpp | 4 | ||||
-rw-r--r-- | llvm/unittests/CodeGen/SelectionDAGTestBase.h | 7 | ||||
-rw-r--r-- | llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp | 139 | ||||
-rw-r--r-- | llvm/unittests/IR/IRBuilderTest.cpp | 12 | ||||
-rw-r--r-- | llvm/unittests/Support/DebugLogTest.cpp | 5 | ||||
-rw-r--r-- | llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp | 7 | ||||
-rw-r--r-- | llvm/unittests/TextAPI/TextStubV5Tests.cpp | 27 |
8 files changed, 187 insertions, 27 deletions
diff --git a/llvm/unittests/ADT/StringRefTest.cpp b/llvm/unittests/ADT/StringRefTest.cpp index ec9cdc1..d5f8dc4 100644 --- a/llvm/unittests/ADT/StringRefTest.cpp +++ b/llvm/unittests/ADT/StringRefTest.cpp @@ -619,6 +619,19 @@ TEST(StringRefTest, Hashing) { hash_value(StringRef("hello world").slice(1, -1))); } +TEST(StringRefTest, getAutoSenseRadix) { + struct RadixPair { + const char *Str; + unsigned Expected; + } RadixNumbers[] = {{"123", 10}, {"1", 10}, {"0b1", 2}, {"01", 8}, {"0o1", 8}, + {"0x1", 16}, {"0", 10}, {"00", 8}, {"", 10}}; + for (size_t i = 0; i < std::size(RadixNumbers); ++i) { + StringRef number = RadixNumbers[i].Str; + unsigned radix = getAutoSenseRadix(number); + EXPECT_EQ(radix, RadixNumbers[i].Expected); + } +} + struct UnsignedPair { const char *Str; uint64_t Expected; diff --git a/llvm/unittests/Analysis/MemorySSATest.cpp b/llvm/unittests/Analysis/MemorySSATest.cpp index 1a9296f..fceefbc 100644 --- a/llvm/unittests/Analysis/MemorySSATest.cpp +++ b/llvm/unittests/Analysis/MemorySSATest.cpp @@ -1092,8 +1092,8 @@ TEST_F(MemorySSATest, LifetimeMarkersAreClobbers) { // %baz = getelementptr i8, ptr %foo, i64 2 // store i8 0, ptr %foo // store i8 0, ptr %bar - // call void @llvm.lifetime.end.p0(i64 3, ptr %foo) - // call void @llvm.lifetime.start.p0(i64 3, ptr %foo) + // call void @llvm.lifetime.end.p0(ptr %foo) + // call void @llvm.lifetime.start.p0(ptr %foo) // store i8 0, ptr %foo // store i8 0, ptr %bar // call void @llvm.memset.p0i8(ptr %baz, i8 0, i64 1) diff --git a/llvm/unittests/CodeGen/SelectionDAGTestBase.h b/llvm/unittests/CodeGen/SelectionDAGTestBase.h index edc730d..8a0a05f 100644 --- a/llvm/unittests/CodeGen/SelectionDAGTestBase.h +++ b/llvm/unittests/CodeGen/SelectionDAGTestBase.h @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "llvm/Analysis/OptimizationRemarkEmitter.h" -#include "llvm/Analysis/TargetTransformInfo.h" #include "llvm/AsmParser/Parser.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/TargetLowering.h" @@ -72,12 +71,8 @@ protected: if (!DAG) reportFatalUsageError("Failed to create SelectionDAG?"); OptimizationRemarkEmitter ORE(F); - FunctionAnalysisManager FAM; - FAM.registerPass([&] { return TM->getTargetIRAnalysis(); }); - - TargetTransformInfo TTI = TM->getTargetIRAnalysis().run(*F, FAM); DAG->init(*MF, ORE, nullptr, nullptr, nullptr, nullptr, nullptr, MMI, - nullptr, TTI.hasBranchDivergence(F)); + nullptr); } TargetLoweringBase::LegalizeTypeAction getTypeAction(EVT VT) { diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp index d6b578a..b7a060b 100644 --- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp +++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp @@ -23,6 +23,7 @@ #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "gmock/gmock.h" #include "gtest/gtest.h" +#include <cstdlib> #include <optional> using namespace llvm; @@ -5360,6 +5361,144 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) { EXPECT_TRUE(findGEPZeroOne(ReductionFn->getArg(1), FirstRHS, SecondRHS)); } +static void createScan(llvm::Value *scanVar, llvm::Type *scanType, + OpenMPIRBuilder &OMPBuilder, IRBuilder<> &Builder, + OpenMPIRBuilder::LocationDescription Loc, + OpenMPIRBuilder::InsertPointTy &allocaIP, + ScanInfo *&ScanRedInfo) { + using InsertPointTy = OpenMPIRBuilder::InsertPointTy; + ASSERT_EXPECTED_INIT(InsertPointTy, retIp, + OMPBuilder.createScan(Loc, allocaIP, {scanVar}, + {scanType}, true, ScanRedInfo)); + Builder.restoreIP(retIp); +} +/* + Following is the pseudocode of the code generated by the test case + <declare pointer to buffer> ptr + size num_iters = 100 + // temp buffer allocation + omp masked { + buff = malloc(num_iters*scanvarstype) + *ptr = buff + } + barrier; + // input phase loop + for (i: 0..<num_iters>) { + <input phase>; + buffer = *ptr; + buffer[i] = red; + } + // scan reduction + omp masked + { + for (int k = 0; k != ceil(log2(num_iters)); ++k) { + i=pow(2,k) + for (size cnt = last_iter; cnt >= i; --cnt) { + buffer = *ptr; + buffer[cnt] op= buffer[cnt-i]; + } + } + } + barrier; + // scan phase loop + for (0..<num_iters>) { + buffer = *ptr; + red = buffer[i] ; + <scan phase>; + } + // temp buffer deletion + omp masked { + free(*ptr) + } + barrier; +*/ +TEST_F(OpenMPIRBuilderTest, ScanReduction) { + using InsertPointTy = OpenMPIRBuilder::InsertPointTy; + OpenMPIRBuilder OMPBuilder(*M); + OMPBuilder.initialize(); + IRBuilder<> Builder(BB); + OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL}); + Value *TripCount = F->getArg(0); + Type *LCTy = TripCount->getType(); + Value *StartVal = ConstantInt::get(LCTy, 1); + Value *StopVal = ConstantInt::get(LCTy, 100); + Value *Step = ConstantInt::get(LCTy, 1); + auto AllocaIP = Builder.saveIP(); + + llvm::Value *ScanVar = Builder.CreateAlloca(Builder.getFloatTy()); + llvm::Value *OrigVar = Builder.CreateAlloca(Builder.getFloatTy()); + unsigned NumBodiesGenerated = 0; + ScanInfo *ScanRedInfo; + ASSERT_EXPECTED_INIT(ScanInfo *, ScanInformation, + OMPBuilder.scanInfoInitialize()); + ScanRedInfo = ScanInformation; + auto LoopBodyGenCB = [&](InsertPointTy CodeGenIP, llvm::Value *LC) { + NumBodiesGenerated += 1; + Builder.restoreIP(CodeGenIP); + createScan(ScanVar, Builder.getFloatTy(), OMPBuilder, Builder, Loc, + AllocaIP, ScanRedInfo); + return Error::success(); + }; + llvm::SmallVector<CanonicalLoopInfo *> loops; + ASSERT_EXPECTED_INIT(llvm::SmallVector<CanonicalLoopInfo *>, loopvec, + OMPBuilder.createCanonicalScanLoops( + Loc, LoopBodyGenCB, StartVal, StopVal, Step, false, + false, Builder.saveIP(), "scan", ScanRedInfo)); + loops = loopvec; + CanonicalLoopInfo *InputLoop = loops.front(); + CanonicalLoopInfo *ScanLoop = loops.back(); + Builder.restoreIP(ScanLoop->getAfterIP()); + InputLoop->assertOK(); + ScanLoop->assertOK(); + + EXPECT_EQ(ScanLoop->getAfter(), Builder.GetInsertBlock()); + EXPECT_EQ(NumBodiesGenerated, 2U); + SmallVector<OpenMPIRBuilder::ReductionInfo> ReductionInfos = { + {Builder.getFloatTy(), OrigVar, ScanVar, + /*EvaluationKind=*/OpenMPIRBuilder::EvalKind::Scalar, sumReduction, + /*ReductionGenClang=*/nullptr, sumAtomicReduction}}; + OpenMPIRBuilder::LocationDescription RedLoc({InputLoop->getAfterIP(), DL}); + llvm::BasicBlock *Cont = splitBB(Builder, false, "omp.scan.loop.cont"); + ASSERT_EXPECTED_INIT( + InsertPointTy, retIp, + OMPBuilder.emitScanReduction(RedLoc, ReductionInfos, ScanRedInfo)); + Builder.restoreIP(retIp); + Builder.CreateBr(Cont); + Builder.SetInsertPoint(Cont); + unsigned NumMallocs = 0; + unsigned NumFrees = 0; + unsigned NumMasked = 0; + unsigned NumEndMasked = 0; + unsigned NumLog = 0; + unsigned NumCeil = 0; + for (Instruction &I : instructions(F)) { + if (!isa<CallInst>(I)) + continue; + CallInst *Call = dyn_cast<CallInst>(&I); + StringRef Name = Call->getCalledFunction()->getName(); + if (Name.equals_insensitive("malloc")) { + NumMallocs += 1; + } else if (Name.equals_insensitive("free")) { + NumFrees += 1; + } else if (Name.equals_insensitive("__kmpc_masked")) { + NumMasked += 1; + } else if (Name.equals_insensitive("__kmpc_end_masked")) { + NumEndMasked += 1; + } else if (Name.equals_insensitive("llvm.log2.f64")) { + NumLog += 1; + } else if (Name.equals_insensitive("llvm.ceil.f64")) { + NumCeil += 1; + } + } + EXPECT_EQ(NumBodiesGenerated, 2U); + EXPECT_EQ(NumMasked, 3U); + EXPECT_EQ(NumEndMasked, 3U); + EXPECT_EQ(NumMallocs, 1U); + EXPECT_EQ(NumFrees, 1U); + EXPECT_EQ(NumLog, 1U); + EXPECT_EQ(NumCeil, 1U); +} + TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) { using InsertPointTy = OpenMPIRBuilder::InsertPointTy; OpenMPIRBuilder OMPBuilder(*M); diff --git a/llvm/unittests/IR/IRBuilderTest.cpp b/llvm/unittests/IR/IRBuilderTest.cpp index 4f2ede3..773c32e 100644 --- a/llvm/unittests/IR/IRBuilderTest.cpp +++ b/llvm/unittests/IR/IRBuilderTest.cpp @@ -466,15 +466,11 @@ TEST_F(IRBuilderTest, Lifetime) { CallInst *Start1 = Builder.CreateLifetimeStart(Var1); CallInst *Start2 = Builder.CreateLifetimeStart(Var2); - CallInst *Start3 = Builder.CreateLifetimeStart(Var3, Builder.getInt64(100)); + CallInst *Start3 = Builder.CreateLifetimeStart(Var3); - EXPECT_EQ(Start1->getArgOperand(0), Builder.getInt64(-1)); - EXPECT_EQ(Start2->getArgOperand(0), Builder.getInt64(-1)); - EXPECT_EQ(Start3->getArgOperand(0), Builder.getInt64(100)); - - EXPECT_EQ(Start1->getArgOperand(1), Var1); - EXPECT_EQ(Start2->getArgOperand(1)->stripPointerCasts(), Var2); - EXPECT_EQ(Start3->getArgOperand(1), Var3); + EXPECT_EQ(Start1->getArgOperand(0), Var1); + EXPECT_EQ(Start2->getArgOperand(0), Var2); + EXPECT_EQ(Start3->getArgOperand(0), Var3); Value *End1 = Builder.CreateLifetimeEnd(Var1); Builder.CreateLifetimeEnd(Var2); diff --git a/llvm/unittests/Support/DebugLogTest.cpp b/llvm/unittests/Support/DebugLogTest.cpp index c24d1a5..b28c59c 100644 --- a/llvm/unittests/Support/DebugLogTest.cpp +++ b/llvm/unittests/Support/DebugLogTest.cpp @@ -6,11 +6,6 @@ // //===----------------------------------------------------------------------===// -// This macro is defined in the LLVM build system, but we undefine it here -// so that we test at least once in-tree the case where __SHORT_FILE__ is not -// defined. -#undef __SHORT_FILE__ - #include "llvm/Support/DebugLog.h" #include "llvm/ADT/Sequence.h" #include "llvm/Support/raw_ostream.h" diff --git a/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp b/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp index 28d69f3..f06f03b 100644 --- a/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp +++ b/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp @@ -8,7 +8,6 @@ #include "AArch64SelectionDAGInfo.h" #include "llvm/Analysis/MemoryLocation.h" #include "llvm/Analysis/OptimizationRemarkEmitter.h" -#include "llvm/Analysis/TargetTransformInfo.h" #include "llvm/AsmParser/Parser.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/SelectionDAG.h" @@ -63,12 +62,8 @@ protected: if (!DAG) report_fatal_error("DAG?"); OptimizationRemarkEmitter ORE(F); - FunctionAnalysisManager FAM; - FAM.registerPass([&] { return TM->getTargetIRAnalysis(); }); - - TargetTransformInfo TTI = TM->getTargetIRAnalysis().run(*F, FAM); DAG->init(*MF, ORE, nullptr, nullptr, nullptr, nullptr, nullptr, MMI, - nullptr, TTI.hasBranchDivergence(F)); + nullptr); } TargetLoweringBase::LegalizeTypeAction getTypeAction(EVT VT) { diff --git a/llvm/unittests/TextAPI/TextStubV5Tests.cpp b/llvm/unittests/TextAPI/TextStubV5Tests.cpp index 24577b3..f6689f7 100644 --- a/llvm/unittests/TextAPI/TextStubV5Tests.cpp +++ b/llvm/unittests/TextAPI/TextStubV5Tests.cpp @@ -1167,6 +1167,33 @@ TEST(TBDv5, InvalidMinOS) { EXPECT_EQ("invalid min_deployment section\n", ErrorMessage); } +TEST(TBDv5, RISCV) { + static const char TBDv5File[] = R"({ +"tapi_tbd_version": 5, +"main_library": { + "target_info": [ + { + "target": "riscv32-ios", + "min_deployment": "34.1" + } + ], + "install_names":[ + { "name":"/S/L/F/Foo.framework/Foo" } + ] +}})"; + + Expected<TBDFile> Result = + TextAPIReader::get(MemoryBufferRef(TBDv5File, "Test.tbd")); + EXPECT_TRUE(!!Result); + Target ExpectedTarget = Target(AK_riscv32, PLATFORM_IOS, VersionTuple(34, 1)); + TBDFile ReadFile = std::move(Result.get()); + EXPECT_EQ(FileType::TBD_V5, ReadFile->getFileType()); + EXPECT_EQ(std::string("/S/L/F/Foo.framework/Foo"), + ReadFile->getInstallName()); + EXPECT_TRUE(ReadFile->targets().begin() != ReadFile->targets().end()); + EXPECT_EQ(*ReadFile->targets().begin(), ExpectedTarget); +} + TEST(TBDv5, SimSupport) { static const char TBDv5File[] = R"({ "tapi_tbd_version": 5, |