@@ -776,3 +776,143 @@ void builtin_conj() {
776
776
// LLVM-NEXT: %{{.+}} = insertvalue { double, double } %[[#A]], double %[[#RESI]], 1
777
777
778
778
// CHECK: }
779
+
780
+ void pre_increment () {
781
+ ++ cd1 ;
782
+ ++ ci1 ;
783
+ }
784
+
785
+ // CLANG: @pre_increment
786
+ // CPPLANG: @_Z13pre_incrementv
787
+
788
+ // CIRGEN: %{{.+}} = cir.unary(inc, %{{.+}}) : !cir.complex<!cir.double>, !cir.complex<!cir.double>
789
+ // CIRGEN: %{{.+}} = cir.unary(inc, %{{.+}}) : !cir.complex<!s32i>, !cir.complex<!s32i>
790
+
791
+ // CIR: %[[#R:]] = cir.complex.real %{{.+}} : !cir.complex<!cir.double> -> !cir.double
792
+ // CIR-NEXT: %[[#I:]] = cir.complex.imag %{{.+}} : !cir.complex<!cir.double> -> !cir.double
793
+ // CIR-NEXT: %[[#IR:]] = cir.unary(inc, %[[#R]]) : !cir.double, !cir.double
794
+ // CIR-NEXT: %{{.+}} = cir.complex.create %[[#IR]], %[[#I]] : !cir.double -> !cir.complex<!cir.double>
795
+
796
+ // CIR: %[[#R:]] = cir.complex.real %{{.+}} : !cir.complex<!s32i> -> !s32i
797
+ // CIR-NEXT: %[[#I:]] = cir.complex.imag %{{.+}} : !cir.complex<!s32i> -> !s32i
798
+ // CIR-NEXT: %[[#IR:]] = cir.unary(inc, %[[#R]]) : !s32i, !s32i
799
+ // CIR-NEXT: %{{.+}} = cir.complex.create %[[#IR]], %[[#I]] : !s32i -> !cir.complex<!s32i>
800
+
801
+ // LLVM: %[[#R:]] = extractvalue { double, double } %{{.+}}, 0
802
+ // LLVM-NEXT: %[[#I:]] = extractvalue { double, double } %{{.+}}, 1
803
+ // LLVM-NEXT: %[[#IR:]] = fadd double 1.000000e+00, %[[#R]]
804
+ // LLVM-NEXT: %[[#A:]] = insertvalue { double, double } undef, double %[[#IR]], 0
805
+ // LLVM-NEXT: %{{.+}} = insertvalue { double, double } %[[#A]], double %[[#I]], 1
806
+
807
+ // LLVM: %[[#R:]] = extractvalue { i32, i32 } %{{.+}}, 0
808
+ // LLVM-NEXT: %[[#I:]] = extractvalue { i32, i32 } %{{.+}}, 1
809
+ // LLVM-NEXT: %[[#IR:]] = add i32 %[[#R]], 1
810
+ // LLVM-NEXT: %[[#A:]] = insertvalue { i32, i32 } undef, i32 %[[#IR]], 0
811
+ // LLVM-NEXT: %{{.+}} = insertvalue { i32, i32 } %[[#A]], i32 %[[#I]], 1
812
+
813
+ // CHECK: }
814
+
815
+ void post_increment () {
816
+ cd1 ++ ;
817
+ ci1 ++ ;
818
+ }
819
+
820
+ // CLANG: @post_increment
821
+ // CPPLANG: @_Z14post_incrementv
822
+
823
+ // CIRGEN: %{{.+}} = cir.unary(inc, %{{.+}}) : !cir.complex<!cir.double>, !cir.complex<!cir.double>
824
+ // CIRGEN: %{{.+}} = cir.unary(inc, %{{.+}}) : !cir.complex<!s32i>, !cir.complex<!s32i>
825
+
826
+ // CIR: %[[#R:]] = cir.complex.real %{{.+}} : !cir.complex<!cir.double> -> !cir.double
827
+ // CIR-NEXT: %[[#I:]] = cir.complex.imag %{{.+}} : !cir.complex<!cir.double> -> !cir.double
828
+ // CIR-NEXT: %[[#IR:]] = cir.unary(inc, %[[#R]]) : !cir.double, !cir.double
829
+ // CIR-NEXT: %{{.+}} = cir.complex.create %[[#IR]], %[[#I]] : !cir.double -> !cir.complex<!cir.double>
830
+
831
+ // CIR: %[[#R:]] = cir.complex.real %{{.+}} : !cir.complex<!s32i> -> !s32i
832
+ // CIR-NEXT: %[[#I:]] = cir.complex.imag %{{.+}} : !cir.complex<!s32i> -> !s32i
833
+ // CIR-NEXT: %[[#IR:]] = cir.unary(inc, %[[#R]]) : !s32i, !s32i
834
+ // CIR-NEXT: %{{.+}} = cir.complex.create %[[#IR]], %[[#I]] : !s32i -> !cir.complex<!s32i>
835
+
836
+ // LLVM: %[[#R:]] = extractvalue { double, double } %{{.+}}, 0
837
+ // LLVM-NEXT: %[[#I:]] = extractvalue { double, double } %{{.+}}, 1
838
+ // LLVM-NEXT: %[[#IR:]] = fadd double 1.000000e+00, %[[#R]]
839
+ // LLVM-NEXT: %[[#A:]] = insertvalue { double, double } undef, double %[[#IR]], 0
840
+ // LLVM-NEXT: %{{.+}} = insertvalue { double, double } %[[#A]], double %[[#I]], 1
841
+
842
+ // LLVM: %[[#R:]] = extractvalue { i32, i32 } %{{.+}}, 0
843
+ // LLVM-NEXT: %[[#I:]] = extractvalue { i32, i32 } %{{.+}}, 1
844
+ // LLVM-NEXT: %[[#IR:]] = add i32 %[[#R]], 1
845
+ // LLVM-NEXT: %[[#A:]] = insertvalue { i32, i32 } undef, i32 %[[#IR]], 0
846
+ // LLVM-NEXT: %{{.+}} = insertvalue { i32, i32 } %[[#A]], i32 %[[#I]], 1
847
+
848
+ // CHECK: }
849
+
850
+ void pre_decrement () {
851
+ -- cd1 ;
852
+ -- ci1 ;
853
+ }
854
+
855
+ // CLANG: @pre_decrement
856
+ // CPPLANG: @_Z13pre_decrementv
857
+
858
+ // CIRGEN: %{{.+}} = cir.unary(dec, %{{.+}}) : !cir.complex<!cir.double>, !cir.complex<!cir.double>
859
+ // CIRGEN: %{{.+}} = cir.unary(dec, %{{.+}}) : !cir.complex<!s32i>, !cir.complex<!s32i>
860
+
861
+ // CIR: %[[#R:]] = cir.complex.real %{{.+}} : !cir.complex<!cir.double> -> !cir.double
862
+ // CIR-NEXT: %[[#I:]] = cir.complex.imag %{{.+}} : !cir.complex<!cir.double> -> !cir.double
863
+ // CIR-NEXT: %[[#IR:]] = cir.unary(dec, %[[#R]]) : !cir.double, !cir.double
864
+ // CIR-NEXT: %{{.+}} = cir.complex.create %[[#IR]], %[[#I]] : !cir.double -> !cir.complex<!cir.double>
865
+
866
+ // CIR: %[[#R:]] = cir.complex.real %{{.+}} : !cir.complex<!s32i> -> !s32i
867
+ // CIR-NEXT: %[[#I:]] = cir.complex.imag %{{.+}} : !cir.complex<!s32i> -> !s32i
868
+ // CIR-NEXT: %[[#IR:]] = cir.unary(dec, %[[#R]]) : !s32i, !s32i
869
+ // CIR-NEXT: %{{.+}} = cir.complex.create %[[#IR]], %[[#I]] : !s32i -> !cir.complex<!s32i>
870
+
871
+ // LLVM: %[[#R:]] = extractvalue { double, double } %{{.+}}, 0
872
+ // LLVM-NEXT: %[[#I:]] = extractvalue { double, double } %{{.+}}, 1
873
+ // LLVM-NEXT: %[[#IR:]] = fadd double -1.000000e+00, %[[#R]]
874
+ // LLVM-NEXT: %[[#A:]] = insertvalue { double, double } undef, double %[[#IR]], 0
875
+ // LLVM-NEXT: %{{.+}} = insertvalue { double, double } %[[#A]], double %[[#I]], 1
876
+
877
+ // LLVM: %[[#R:]] = extractvalue { i32, i32 } %{{.+}}, 0
878
+ // LLVM-NEXT: %[[#I:]] = extractvalue { i32, i32 } %{{.+}}, 1
879
+ // LLVM-NEXT: %[[#IR:]] = sub i32 %[[#R]], 1
880
+ // LLVM-NEXT: %[[#A:]] = insertvalue { i32, i32 } undef, i32 %[[#IR]], 0
881
+ // LLVM-NEXT: %{{.+}} = insertvalue { i32, i32 } %[[#A]], i32 %[[#I]], 1
882
+
883
+ // CHECK: }
884
+
885
+ void post_decrement () {
886
+ cd1 -- ;
887
+ ci1 -- ;
888
+ }
889
+
890
+ // CLANG: @post_decrement
891
+ // CPPLANG: @_Z14post_decrementv
892
+
893
+ // CIRGEN: %{{.+}} = cir.unary(dec, %{{.+}}) : !cir.complex<!cir.double>, !cir.complex<!cir.double>
894
+ // CIRGEN: %{{.+}} = cir.unary(dec, %{{.+}}) : !cir.complex<!s32i>, !cir.complex<!s32i>
895
+
896
+ // CIR: %[[#R:]] = cir.complex.real %{{.+}} : !cir.complex<!cir.double> -> !cir.double
897
+ // CIR-NEXT: %[[#I:]] = cir.complex.imag %{{.+}} : !cir.complex<!cir.double> -> !cir.double
898
+ // CIR-NEXT: %[[#IR:]] = cir.unary(dec, %[[#R]]) : !cir.double, !cir.double
899
+ // CIR-NEXT: %{{.+}} = cir.complex.create %[[#IR]], %[[#I]] : !cir.double -> !cir.complex<!cir.double>
900
+
901
+ // CIR: %[[#R:]] = cir.complex.real %{{.+}} : !cir.complex<!s32i> -> !s32i
902
+ // CIR-NEXT: %[[#I:]] = cir.complex.imag %{{.+}} : !cir.complex<!s32i> -> !s32i
903
+ // CIR-NEXT: %[[#IR:]] = cir.unary(dec, %[[#R]]) : !s32i, !s32i
904
+ // CIR-NEXT: %{{.+}} = cir.complex.create %[[#IR]], %[[#I]] : !s32i -> !cir.complex<!s32i>
905
+
906
+ // LLVM: %[[#R:]] = extractvalue { double, double } %{{.+}}, 0
907
+ // LLVM-NEXT: %[[#I:]] = extractvalue { double, double } %{{.+}}, 1
908
+ // LLVM-NEXT: %[[#IR:]] = fadd double -1.000000e+00, %[[#R]]
909
+ // LLVM-NEXT: %[[#A:]] = insertvalue { double, double } undef, double %[[#IR]], 0
910
+ // LLVM-NEXT: %{{.+}} = insertvalue { double, double } %[[#A]], double %[[#I]], 1
911
+
912
+ // LLVM: %[[#R:]] = extractvalue { i32, i32 } %{{.+}}, 0
913
+ // LLVM-NEXT: %[[#I:]] = extractvalue { i32, i32 } %{{.+}}, 1
914
+ // LLVM-NEXT: %[[#IR:]] = sub i32 %[[#R]], 1
915
+ // LLVM-NEXT: %[[#A:]] = insertvalue { i32, i32 } undef, i32 %[[#IR]], 0
916
+ // LLVM-NEXT: %{{.+}} = insertvalue { i32, i32 } %[[#A]], i32 %[[#I]], 1
917
+
918
+ // CHECK: }
0 commit comments