@@ -575,47 +575,75 @@ void b1(bool a, bool b) {
575
575
576
576
577
577
// LLVM-LABEL: define void @_Z2b1bb(
578
- // LLVM-SAME: i1 %[[ARG0:[0-9] +]], i1 %[[ARG1:[0-9] +]])
579
- // LLVM: %[[A_ADDR:.*]] = alloca i8, i64 1
580
- // LLVM: %[[B_ADDR:.*]] = alloca i8, i64 1
581
- // LLVM: %[[X:.*]] = alloca i8, i64 1
578
+ // LLVM-SAME: i1 %[[ARG0:. +]], i1 %[[ARG1:. +]])
579
+ // LLVM: %[[A_ADDR:.*]] = alloca i8
580
+ // LLVM: %[[B_ADDR:.*]] = alloca i8
581
+ // LLVM: %[[X:.*]] = alloca i8
582
582
// LLVM: %[[ZEXT0:.*]] = zext i1 %[[ARG0]] to i8
583
583
// LLVM: store i8 %[[ZEXT0]], ptr %[[A_ADDR]]
584
584
// LLVM: %[[ZEXT1:.*]] = zext i1 %[[ARG1]] to i8
585
585
// LLVM: store i8 %[[ZEXT1]], ptr %[[B_ADDR]]
586
586
// LLVM: %[[A_VAL:.*]] = load i8, ptr %[[A_ADDR]]
587
587
// LLVM: %[[A_BOOL:.*]] = trunc i8 %[[A_VAL]] to i1
588
- // LLVM: br i1 %[[A_BOOL]], label %[[AND_TRUE:[0-9] +]], label %[[AND_FALSE:[0-9] +]]
588
+ // LLVM: br i1 %[[A_BOOL]], label %[[AND_TRUE:. +]], label %[[AND_FALSE:. +]]
589
589
// LLVM: [[AND_TRUE]]:
590
590
// LLVM: %[[B_VAL:.*]] = load i8, ptr %[[B_ADDR]]
591
591
// LLVM: %[[B_BOOL:.*]] = trunc i8 %[[B_VAL]] to i1
592
- // LLVM: br label %[[AND_MERGE:[0-9] +]]
592
+ // LLVM: br label %[[AND_MERGE:. +]]
593
593
// LLVM: [[AND_FALSE]]:
594
594
// LLVM: br label %[[AND_MERGE]]
595
595
// LLVM: [[AND_MERGE]]:
596
596
// LLVM: %[[AND_PHI:.*]] = phi i1 [ false, %[[AND_FALSE]] ], [ %[[B_BOOL]], %[[AND_TRUE]] ]
597
- // LLVM: br label %[[AND_CONT:[0-9]+]]
598
- // LLVM: [[AND_CONT]]:
599
597
// LLVM: %[[ZEXT_AND:.*]] = zext i1 %[[AND_PHI]] to i8
600
598
// LLVM: store i8 %[[ZEXT_AND]], ptr %[[X]]
601
599
// LLVM: %[[X_VAL:.*]] = load i8, ptr %[[X]]
602
600
// LLVM: %[[X_BOOL:.*]] = trunc i8 %[[X_VAL]] to i1
603
- // LLVM: br i1 %[[X_BOOL]], label %[[OR_TRUE:[0-9] +]], label %[[OR_FALSE:[0-9] +]]
601
+ // LLVM: br i1 %[[X_BOOL]], label %[[OR_TRUE:. +]], label %[[OR_FALSE:. +]]
604
602
// LLVM: [[OR_TRUE]]:
605
- // LLVM: br label %[[OR_MERGE:[0-9] +]]
603
+ // LLVM: br label %[[OR_MERGE:. +]]
606
604
// LLVM: [[OR_FALSE]]:
607
605
// LLVM: %[[B_VAL2:.*]] = load i8, ptr %[[B_ADDR]]
608
606
// LLVM: %[[B_BOOL2:.*]] = trunc i8 %[[B_VAL2]] to i1
609
607
// LLVM: br label %[[OR_MERGE]]
610
608
// LLVM: [[OR_MERGE]]:
611
609
// LLVM: %[[OR_PHI:.*]] = phi i1 [ %[[B_BOOL2]], %[[OR_FALSE]] ], [ true, %[[OR_TRUE]] ]
612
- // LLVM: br label %[[OR_CONT:[0-9]+]]
613
- // LLVM: [[OR_CONT]]:
614
610
// LLVM: %[[ZEXT_OR:.*]] = zext i1 %[[OR_PHI]] to i8
615
611
// LLVM: store i8 %[[ZEXT_OR]], ptr %[[X]]
616
612
// LLVM: ret void
617
613
618
-
614
+ // OGCG-LABEL: define dso_local void @_Z2b1bb
615
+ // OGCG-SAME: (i1 {{.*}} %[[ARG0:.+]], i1 {{.*}} %[[ARG1:.+]])
616
+ // OGCG: [[ENTRY:.*]]:
617
+ // OGCG: %[[A_ADDR:.*]] = alloca i8
618
+ // OGCG: %[[B_ADDR:.*]] = alloca i8
619
+ // OGCG: %[[X:.*]] = alloca i8
620
+ // OGCG: %[[ZEXT0:.*]] = zext i1 %[[ARG0]] to i8
621
+ // OGCG: store i8 %[[ZEXT0]], ptr %[[A_ADDR]]
622
+ // OGCG: %[[ZEXT1:.*]] = zext i1 %[[ARG1]] to i8
623
+ // OGCG: store i8 %[[ZEXT1]], ptr %[[B_ADDR]]
624
+ // OGCG: %[[A_VAL:.*]] = load i8, ptr %[[A_ADDR]]
625
+ // OGCG: %[[A_BOOL:.*]] = trunc i8 %[[A_VAL]] to i1
626
+ // OGCG: br i1 %[[A_BOOL]], label %[[AND_TRUE:.+]], label %[[AND_MERGE:.+]]
627
+ // OGCG: [[AND_TRUE]]:
628
+ // OGCG: %[[B_VAL:.*]] = load i8, ptr %[[B_ADDR]]
629
+ // OGCG: %[[B_BOOL:.*]] = trunc i8 %[[B_VAL]] to i1
630
+ // OGCG: br label %[[AND_MERGE:.+]]
631
+ // OGCG: [[AND_MERGE]]:
632
+ // OGCG: %[[AND_PHI:.*]] = phi i1 [ false, %[[ENTRY]] ], [ %[[B_BOOL]], %[[AND_TRUE]] ]
633
+ // OGCG: %[[ZEXT_AND:.*]] = zext i1 %[[AND_PHI]] to i8
634
+ // OGCG: store i8 %[[ZEXT_AND]], ptr %[[X]]
635
+ // OGCG: %[[X_VAL:.*]] = load i8, ptr %[[X]]
636
+ // OGCG: %[[X_BOOL:.*]] = trunc i8 %[[X_VAL]] to i1
637
+ // OGCG: br i1 %[[X_BOOL]], label %[[OR_MERGE:.+]], label %[[OR_FALSE:.+]]
638
+ // OGCG: [[OR_FALSE]]:
639
+ // OGCG: %[[B_VAL2:.*]] = load i8, ptr %[[B_ADDR]]
640
+ // OGCG: %[[B_BOOL2:.*]] = trunc i8 %[[B_VAL2]] to i1
641
+ // OGCG: br label %[[OR_MERGE]]
642
+ // OGCG: [[OR_MERGE]]:
643
+ // OGCG: %[[OR_PHI:.*]] = phi i1 [ true, %[[AND_MERGE]] ], [ %[[B_BOOL2]], %[[OR_FALSE]] ]
644
+ // OGCG: %[[ZEXT_OR:.*]] = zext i1 %[[OR_PHI]] to i8
645
+ // OGCG: store i8 %[[ZEXT_OR]], ptr %[[X]]
646
+ // OGCG: ret void
619
647
620
648
void b3 (int a, int b, int c, int d) {
621
649
bool x = (a == b) && (c == d);
@@ -663,7 +691,7 @@ void b3(int a, int b, int c, int d) {
663
691
664
692
665
693
// LLVM-LABEL: define void @_Z2b3iiii(
666
- // LLVM-SAME: i32 %[[ARG0:[0-9] +]], i32 %[[ARG1:[0-9] +]], i32 %[[ARG2:[0-9] +]], i32 %[[ARG3:[0-9] +]])
694
+ // LLVM-SAME: i32 %[[ARG0:. +]], i32 %[[ARG1:. +]], i32 %[[ARG2:. +]], i32 %[[ARG3:. +]])
667
695
// LLVM: %[[A_ADDR:.*]] = alloca i32, i64 1
668
696
// LLVM: %[[B_ADDR:.*]] = alloca i32, i64 1
669
697
// LLVM: %[[C_ADDR:.*]] = alloca i32, i64 1
@@ -676,35 +704,71 @@ void b3(int a, int b, int c, int d) {
676
704
// LLVM: %[[A_VAL:.*]] = load i32, ptr %[[A_ADDR]]
677
705
// LLVM: %[[B_VAL:.*]] = load i32, ptr %[[B_ADDR]]
678
706
// LLVM: %[[CMP1:.*]] = icmp eq i32 %[[A_VAL]], %[[B_VAL]]
679
- // LLVM: br i1 %[[CMP1]], label %[[AND_TRUE:[0-9] +]], label %[[AND_FALSE:[0-9] +]]
707
+ // LLVM: br i1 %[[CMP1]], label %[[AND_TRUE:. +]], label %[[AND_FALSE:. +]]
680
708
// LLVM: [[AND_TRUE]]:
681
709
// LLVM: %[[C_VAL:.*]] = load i32, ptr %[[C_ADDR]]
682
710
// LLVM: %[[D_VAL:.*]] = load i32, ptr %[[D_ADDR]]
683
711
// LLVM: %[[CMP2:.*]] = icmp eq i32 %[[C_VAL]], %[[D_VAL]]
684
- // LLVM: br label %[[AND_MERGE:[0-9] +]]
712
+ // LLVM: br label %[[AND_MERGE:. +]]
685
713
// LLVM: [[AND_FALSE]]:
686
714
// LLVM: br label %[[AND_MERGE]]
687
715
// LLVM: [[AND_MERGE]]:
688
716
// LLVM: %[[AND_PHI:.*]] = phi i1 [ false, %[[AND_FALSE]] ], [ %[[CMP2]], %[[AND_TRUE]] ]
689
- // LLVM: br label %[[AND_CONT:[0-9]+]]
690
- // LLVM: [[AND_CONT]]:
691
717
// LLVM: %[[ZEXT_AND:.*]] = zext i1 %[[AND_PHI]] to i8
692
718
// LLVM: store i8 %[[ZEXT_AND]], ptr %[[X]]
693
719
// LLVM: %[[A_VAL2:.*]] = load i32, ptr %[[A_ADDR]]
694
720
// LLVM: %[[B_VAL2:.*]] = load i32, ptr %[[B_ADDR]]
695
721
// LLVM: %[[CMP3:.*]] = icmp eq i32 %[[A_VAL2]], %[[B_VAL2]]
696
- // LLVM: br i1 %[[CMP3]], label %[[OR_TRUE:[0-9] +]], label %[[OR_FALSE:[0-9] +]]
722
+ // LLVM: br i1 %[[CMP3]], label %[[OR_TRUE:. +]], label %[[OR_FALSE:. +]]
697
723
// LLVM: [[OR_TRUE]]:
698
- // LLVM: br label %[[OR_MERGE:[0-9] +]]
724
+ // LLVM: br label %[[OR_MERGE:. +]]
699
725
// LLVM: [[OR_FALSE]]:
700
726
// LLVM: %[[C_VAL2:.*]] = load i32, ptr %[[C_ADDR]]
701
727
// LLVM: %[[D_VAL2:.*]] = load i32, ptr %[[D_ADDR]]
702
728
// LLVM: %[[CMP4:.*]] = icmp eq i32 %[[C_VAL2]], %[[D_VAL2]]
703
729
// LLVM: br label %[[OR_MERGE]]
704
730
// LLVM: [[OR_MERGE]]:
705
731
// LLVM: %[[OR_PHI:.*]] = phi i1 [ %[[CMP4]], %[[OR_FALSE]] ], [ true, %[[OR_TRUE]] ]
706
- // LLVM: br label %[[OR_CONT:[0-9]+]]
707
- // LLVM: [[OR_CONT]]:
708
732
// LLVM: %[[ZEXT_OR:.*]] = zext i1 %[[OR_PHI]] to i8
709
733
// LLVM: store i8 %[[ZEXT_OR]], ptr %[[X]]
710
734
// LLVM: ret void
735
+
736
+ // OGCG-LABEL: define dso_local void @_Z2b3iiii(
737
+ // OGCG-SAME: i32 {{.*}} %[[ARG0:.+]], i32 {{.*}} %[[ARG1:.+]], i32 {{.*}} %[[ARG2:.+]], i32 {{.*}} %[[ARG3:.+]])
738
+ // OGCG: [[ENTRY:.*]]:
739
+ // OGCG: %[[A_ADDR:.*]] = alloca i32
740
+ // OGCG: %[[B_ADDR:.*]] = alloca i32
741
+ // OGCG: %[[C_ADDR:.*]] = alloca i32
742
+ // OGCG: %[[D_ADDR:.*]] = alloca i32
743
+ // OGCG: %[[X:.*]] = alloca i8
744
+ // OGCG: store i32 %[[ARG0]], ptr %[[A_ADDR]]
745
+ // OGCG: store i32 %[[ARG1]], ptr %[[B_ADDR]]
746
+ // OGCG: store i32 %[[ARG2]], ptr %[[C_ADDR]]
747
+ // OGCG: store i32 %[[ARG3]], ptr %[[D_ADDR]]
748
+ // OGCG: %[[A_VAL:.*]] = load i32, ptr %[[A_ADDR]]
749
+ // OGCG: %[[B_VAL:.*]] = load i32, ptr %[[B_ADDR]]
750
+ // OGCG: %[[CMP1:.*]] = icmp eq i32 %[[A_VAL]], %[[B_VAL]]
751
+ // OGCG: br i1 %[[CMP1]], label %[[AND_TRUE:.+]], label %[[AND_MERGE:.+]]
752
+ // OGCG: [[AND_TRUE]]:
753
+ // OGCG: %[[C_VAL:.*]] = load i32, ptr %[[C_ADDR]]
754
+ // OGCG: %[[D_VAL:.*]] = load i32, ptr %[[D_ADDR]]
755
+ // OGCG: %[[CMP2:.*]] = icmp eq i32 %[[C_VAL]], %[[D_VAL]]
756
+ // OGCG: br label %[[AND_MERGE:.+]]
757
+ // OGCG: [[AND_MERGE]]:
758
+ // OGCG: %[[AND_PHI:.*]] = phi i1 [ false, %[[ENTRY]] ], [ %[[CMP2]], %[[AND_TRUE]] ]
759
+ // OGCG: %[[ZEXT_AND:.*]] = zext i1 %[[AND_PHI]] to i8
760
+ // OGCG: store i8 %[[ZEXT_AND]], ptr %[[X]]
761
+ // OGCG: %[[A_VAL2:.*]] = load i32, ptr %[[A_ADDR]]
762
+ // OGCG: %[[B_VAL2:.*]] = load i32, ptr %[[B_ADDR]]
763
+ // OGCG: %[[CMP3:.*]] = icmp eq i32 %[[A_VAL2]], %[[B_VAL2]]
764
+ // OGCG: br i1 %[[CMP3]], label %[[OR_MERGE:.+]], label %[[OR_FALSE:.+]]
765
+ // OGCG: [[OR_FALSE]]:
766
+ // OGCG: %[[C_VAL2:.*]] = load i32, ptr %[[C_ADDR]]
767
+ // OGCG: %[[D_VAL2:.*]] = load i32, ptr %[[D_ADDR]]
768
+ // OGCG: %[[CMP4:.*]] = icmp eq i32 %[[C_VAL2]], %[[D_VAL2]]
769
+ // OGCG: br label %[[OR_MERGE]]
770
+ // OGCG: [[OR_MERGE]]:
771
+ // OGCG: %[[OR_PHI:.*]] = phi i1 [ true, %[[AND_MERGE]] ], [ %[[CMP4]], %[[OR_FALSE]] ]
772
+ // OGCG: %[[ZEXT_OR:.*]] = zext i1 %[[OR_PHI]] to i8
773
+ // OGCG: store i8 %[[ZEXT_OR]], ptr %[[X]]
774
+ // OGCG: ret void
0 commit comments