aboutsummaryrefslogtreecommitdiff
path: root/test/opt/loop_optimizations/unroll_assumptions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/opt/loop_optimizations/unroll_assumptions.cpp')
-rw-r--r--test/opt/loop_optimizations/unroll_assumptions.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/opt/loop_optimizations/unroll_assumptions.cpp b/test/opt/loop_optimizations/unroll_assumptions.cpp
index 0f933021..159e4a14 100644
--- a/test/opt/loop_optimizations/unroll_assumptions.cpp
+++ b/test/opt/loop_optimizations/unroll_assumptions.cpp
@@ -42,6 +42,10 @@ class PartialUnrollerTestPass : public Pass {
Status Process() override {
bool changed = false;
for (Function& f : *context()->module()) {
+ if (f.IsDeclaration()) {
+ continue;
+ }
+
LoopDescriptor& loop_descriptor = *context()->GetLoopDescriptor(&f);
for (auto& loop : loop_descriptor) {
LoopUtils loop_utils{context(), &loop};
@@ -1510,6 +1514,33 @@ OpFunctionEnd
SinglePassRunAndCheck<PartialUnrollerTestPass<2>>(text, text, false);
}
+TEST_F(PassClassTest, FunctionDeclaration) {
+ // Make sure the pass works with a function declaration that is called.
+ const std::string text = R"(OpCapability Addresses
+OpCapability Linkage
+OpCapability Kernel
+OpCapability Int8
+%1 = OpExtInstImport "OpenCL.std"
+OpMemoryModel Physical64 OpenCL
+OpEntryPoint Kernel %2 "_Z23julia__1166_kernel_77094Bool"
+OpExecutionMode %2 ContractionOff
+OpSource Unknown 0
+OpDecorate %3 LinkageAttributes "julia_error_7712" Import
+%void = OpTypeVoid
+%5 = OpTypeFunction %void
+%3 = OpFunction %void None %5
+OpFunctionEnd
+%2 = OpFunction %void None %5
+%6 = OpLabel
+%7 = OpFunctionCall %void %3
+OpReturn
+OpFunctionEnd
+)";
+
+ SinglePassRunAndCheck<LoopUnroller>(text, text, false);
+ SinglePassRunAndCheck<PartialUnrollerTestPass<1>>(text, text, false);
+}
+
} // namespace
} // namespace opt
} // namespace spvtools