blob: f0af1cc21e0277ed2649d710a0e1d369613f1897 [file] [edit]
//===- SPIRVModuleAnalysisTests.cpp ---------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "SPIRVModuleAnalysis.h"
#include "llvm/ADT/STLExtras.h"
#include "gtest/gtest.h"
using namespace llvm;
// A capability pruned by removeCapabilityIf must be dropped from the minimal
// capabilities too, since those are the ones the AsmPrinter emits as
// OpCapability.
TEST(SPIRVModuleAnalysisTest, RemoveCapabilityIfPrunesMinimalCaps) {
SPIRV::RequirementHandler Reqs;
Reqs.addCapability(SPIRV::Capability::BitInstructions);
Reqs.addCapability(SPIRV::Capability::Shader);
Reqs.removeCapabilityIf(SPIRV::Capability::BitInstructions,
SPIRV::Capability::Shader);
EXPECT_FALSE(llvm::is_contained(Reqs.getMinimalCapabilities(),
SPIRV::Capability::BitInstructions));
EXPECT_TRUE(llvm::is_contained(Reqs.getMinimalCapabilities(),
SPIRV::Capability::Shader));
}
// When the guarding capability is absent, nothing is removed.
TEST(SPIRVModuleAnalysisTest, RemoveCapabilityIfNoopWhenGuardAbsent) {
SPIRV::RequirementHandler Reqs;
Reqs.addCapability(SPIRV::Capability::BitInstructions);
Reqs.removeCapabilityIf(SPIRV::Capability::BitInstructions,
SPIRV::Capability::Shader);
EXPECT_TRUE(llvm::is_contained(Reqs.getMinimalCapabilities(),
SPIRV::Capability::BitInstructions));
}