@@ -320,6 +320,7 @@ struct MockPassInstrumentationCallbacks {
320
320
ON_CALL (*this , runBeforePass (_, _)).WillByDefault (Return (true ));
321
321
}
322
322
MOCK_METHOD2 (runBeforePass, bool (StringRef PassID, llvm::Any));
323
+ MOCK_METHOD2 (runBeforeNonSkippedPass, void (StringRef PassID, llvm::Any));
323
324
MOCK_METHOD2 (runAfterPass, void (StringRef PassID, llvm::Any));
324
325
MOCK_METHOD1 (runAfterPassInvalidated, void (StringRef PassID));
325
326
MOCK_METHOD2 (runBeforeAnalysis, void (StringRef PassID, llvm::Any));
@@ -329,6 +330,10 @@ struct MockPassInstrumentationCallbacks {
329
330
Callbacks.registerBeforePassCallback ([this ](StringRef P, llvm::Any IR) {
330
331
return this ->runBeforePass (P, IR);
331
332
});
333
+ Callbacks.registerBeforeNonSkippedPassCallback (
334
+ [this ](StringRef P, llvm::Any IR) {
335
+ this ->runBeforeNonSkippedPass (P, IR);
336
+ });
332
337
Callbacks.registerAfterPassCallback (
333
338
[this ](StringRef P, llvm::Any IR) { this ->runAfterPass (P, IR); });
334
339
Callbacks.registerAfterPassInvalidatedCallback (
@@ -349,6 +354,9 @@ struct MockPassInstrumentationCallbacks {
349
354
EXPECT_CALL (*this ,
350
355
runBeforePass (Not (HasNameRegex (" Mock" )), HasName (IRName)))
351
356
.Times (AnyNumber ());
357
+ EXPECT_CALL (*this , runBeforeNonSkippedPass (Not (HasNameRegex (" Mock" )),
358
+ HasName (IRName)))
359
+ .Times (AnyNumber ());
352
360
EXPECT_CALL (*this , runAfterPass (Not (HasNameRegex (" Mock" )), HasName (IRName)))
353
361
.Times (AnyNumber ());
354
362
EXPECT_CALL (*this ,
@@ -500,6 +508,10 @@ TEST_F(ModuleCallbacksTest, InstrumentedPasses) {
500
508
EXPECT_CALL (CallbacksHandle, runBeforePass (HasNameRegex (" MockPassHandle" ),
501
509
HasName (" <string>" )))
502
510
.InSequence (PISequence);
511
+ EXPECT_CALL (CallbacksHandle,
512
+ runBeforeNonSkippedPass (HasNameRegex (" MockPassHandle" ),
513
+ HasName (" <string>" )))
514
+ .InSequence (PISequence);
503
515
EXPECT_CALL (CallbacksHandle,
504
516
runBeforeAnalysis (HasNameRegex (" MockAnalysisHandle" ),
505
517
HasName (" <string>" )))
@@ -532,8 +544,11 @@ TEST_F(ModuleCallbacksTest, InstrumentedSkippedPasses) {
532
544
EXPECT_CALL (AnalysisHandle, run (HasName (" <string>" ), _)).Times (0 );
533
545
EXPECT_CALL (PassHandle, run (HasName (" <string>" ), _)).Times (0 );
534
546
535
- // As the pass is skipped there is no afterPass, beforeAnalysis/afterAnalysis
536
- // as well.
547
+ // As the pass is skipped there is no nonskippedpass/afterPass,
548
+ // beforeAnalysis/afterAnalysis as well.
549
+ EXPECT_CALL (CallbacksHandle,
550
+ runBeforeNonSkippedPass (HasNameRegex (" MockPassHandle" ), _))
551
+ .Times (0 );
537
552
EXPECT_CALL (CallbacksHandle, runAfterPass (HasNameRegex (" MockPassHandle" ), _))
538
553
.Times (0 );
539
554
EXPECT_CALL (CallbacksHandle,
@@ -545,12 +560,35 @@ TEST_F(ModuleCallbacksTest, InstrumentedSkippedPasses) {
545
560
546
561
// Order is important here. `Adaptor` expectations should be checked first
547
562
// because the its argument contains 'PassManager' (for example:
548
- // ModuleToFunctionPassAdaptor{{.*}}PassManager{{.*}}). Here only check
549
- // `runAfterPass` to show that they are not skipped.
550
-
563
+ // ModuleToFunctionPassAdaptor{{.*}}PassManager{{.*}}). Check
564
+ // `runBeforeNonSkippedPass` and `runAfterPass` to show that they are not
565
+ // skipped.
566
+ //
551
567
// Pass managers are not ignored.
552
568
// 5 = (1) ModulePassManager + (2) FunctionPassMangers + (1) LoopPassManager +
553
569
// (1) CGSCCPassManager
570
+ EXPECT_CALL (CallbacksHandle,
571
+ runBeforeNonSkippedPass (HasNameRegex (" PassManager" ), _))
572
+ .Times (5 );
573
+ EXPECT_CALL (
574
+ CallbacksHandle,
575
+ runBeforeNonSkippedPass (HasNameRegex (" ModuleToFunctionPassAdaptor" ), _))
576
+ .Times (1 );
577
+ EXPECT_CALL (CallbacksHandle,
578
+ runBeforeNonSkippedPass (
579
+ HasNameRegex (" ModuleToPostOrderCGSCCPassAdaptor" ), _))
580
+ .Times (1 );
581
+ EXPECT_CALL (
582
+ CallbacksHandle,
583
+ runBeforeNonSkippedPass (HasNameRegex (" CGSCCToFunctionPassAdaptor" ), _))
584
+ .Times (1 );
585
+ EXPECT_CALL (
586
+ CallbacksHandle,
587
+ runBeforeNonSkippedPass (HasNameRegex (" FunctionToLoopPassAdaptor" ), _))
588
+ .Times (1 );
589
+
590
+ // The `runAfterPass` checks are the same as these of
591
+ // `runBeforeNonSkippedPass`.
554
592
EXPECT_CALL (CallbacksHandle, runAfterPass (HasNameRegex (" PassManager" ), _))
555
593
.Times (5 );
556
594
EXPECT_CALL (CallbacksHandle,
@@ -630,6 +668,10 @@ TEST_F(FunctionCallbacksTest, InstrumentedPasses) {
630
668
EXPECT_CALL (CallbacksHandle,
631
669
runBeforePass (HasNameRegex (" MockPassHandle" ), HasName (" foo" )))
632
670
.InSequence (PISequence);
671
+ EXPECT_CALL (
672
+ CallbacksHandle,
673
+ runBeforeNonSkippedPass (HasNameRegex (" MockPassHandle" ), HasName (" foo" )))
674
+ .InSequence (PISequence);
633
675
EXPECT_CALL (
634
676
CallbacksHandle,
635
677
runBeforeAnalysis (HasNameRegex (" MockAnalysisHandle" ), HasName (" foo" )))
@@ -717,6 +759,10 @@ TEST_F(LoopCallbacksTest, InstrumentedPasses) {
717
759
EXPECT_CALL (CallbacksHandle,
718
760
runBeforePass (HasNameRegex (" MockPassHandle" ), HasName (" loop" )))
719
761
.InSequence (PISequence);
762
+ EXPECT_CALL (
763
+ CallbacksHandle,
764
+ runBeforeNonSkippedPass (HasNameRegex (" MockPassHandle" ), HasName (" loop" )))
765
+ .InSequence (PISequence);
720
766
EXPECT_CALL (
721
767
CallbacksHandle,
722
768
runBeforeAnalysis (HasNameRegex (" MockAnalysisHandle" ), HasName (" loop" )))
@@ -758,6 +804,10 @@ TEST_F(LoopCallbacksTest, InstrumentedInvalidatingPasses) {
758
804
EXPECT_CALL (CallbacksHandle,
759
805
runBeforePass (HasNameRegex (" MockPassHandle" ), HasName (" loop" )))
760
806
.InSequence (PISequence);
807
+ EXPECT_CALL (
808
+ CallbacksHandle,
809
+ runBeforeNonSkippedPass (HasNameRegex (" MockPassHandle" ), HasName (" loop" )))
810
+ .InSequence (PISequence);
761
811
EXPECT_CALL (
762
812
CallbacksHandle,
763
813
runBeforeAnalysis (HasNameRegex (" MockAnalysisHandle" ), HasName (" loop" )))
@@ -847,6 +897,10 @@ TEST_F(CGSCCCallbacksTest, InstrumentedPasses) {
847
897
EXPECT_CALL (CallbacksHandle,
848
898
runBeforePass (HasNameRegex (" MockPassHandle" ), HasName (" (foo)" )))
849
899
.InSequence (PISequence);
900
+ EXPECT_CALL (
901
+ CallbacksHandle,
902
+ runBeforeNonSkippedPass (HasNameRegex (" MockPassHandle" ), HasName (" (foo)" )))
903
+ .InSequence (PISequence);
850
904
EXPECT_CALL (
851
905
CallbacksHandle,
852
906
runBeforeAnalysis (HasNameRegex (" MockAnalysisHandle" ), HasName (" (foo)" )))
@@ -888,6 +942,10 @@ TEST_F(CGSCCCallbacksTest, InstrumentedInvalidatingPasses) {
888
942
EXPECT_CALL (CallbacksHandle,
889
943
runBeforePass (HasNameRegex (" MockPassHandle" ), HasName (" (foo)" )))
890
944
.InSequence (PISequence);
945
+ EXPECT_CALL (
946
+ CallbacksHandle,
947
+ runBeforeNonSkippedPass (HasNameRegex (" MockPassHandle" ), HasName (" (foo)" )))
948
+ .InSequence (PISequence);
891
949
EXPECT_CALL (
892
950
CallbacksHandle,
893
951
runBeforeAnalysis (HasNameRegex (" MockAnalysisHandle" ), HasName (" (foo)" )))
0 commit comments