@@ -754,3 +754,76 @@ define float @test_ds_combine_float_int(i8* %0, i32 signext %1) {
754754 %30 = phi float [ 0 .000000e+00 , %2 ], [ %26 , %6 ]
755755 ret float %30
756756}
757+
758+ ; test_ds_lwa_prep:
759+ ; long long test_ds_lwa_prep(char *p, int count) {
760+ ; long long i=0, res=0;
761+ ; int DISP1 = 4001;
762+ ; int DISP2 = 4002;
763+ ; int DISP3 = 4006;
764+ ; int DISP4 = 4010;
765+ ; for (; i < count ; i++) {
766+ ; long long x1 = *(int *)(p + i + DISP1);
767+ ; long long x2 = *(int *)(p + i + DISP2);
768+ ; long long x3 = *(int *)(p + i + DISP3);
769+ ; long long x4 = *(int *)(p + i + DISP4);
770+ ; res += x1*x2*x3*x4;
771+ ; }
772+ ; return res + count;
773+ ; }
774+
775+ define i64 @test_ds_lwa_prep (i8* %0 , i32 signext %1 ) {
776+ ; CHECK-LABEL: test_ds_lwa_prep:
777+ ; CHECK: li r6, 1
778+ ; CHECK-NEXT: li r7, 2
779+ ; CHECK-NEXT: li r8, 6
780+ ; CHECK-NEXT: li r9, 10
781+ ; CHECK: .LBB9_2: #
782+ ; CHECK-NEXT: lwax r11, r3, r6
783+ ; CHECK-NEXT: lwax r12, r3, r7
784+ ; CHECK-NEXT: lwax r0, r3, r8
785+ ; CHECK-NEXT: addi r10, r3, 1
786+ ; CHECK-NEXT: mulld r11, r12, r11
787+ ; CHECK-NEXT: lwax r3, r3, r9
788+ ; CHECK-NEXT: mulld r11, r11, r0
789+ ; CHECK-NEXT: maddld r5, r11, r3, r5
790+ ; CHECK-NEXT: mr r3, r10
791+ ; CHECK-NEXT: bdnz .LBB9_2
792+
793+ %3 = sext i32 %1 to i64
794+ %4 = icmp sgt i32 %1 , 0
795+ br i1 %4 , label %5 , label %31
796+
797+ 5 : ; preds = %2, %5
798+ %6 = phi i64 [ %29 , %5 ], [ 0 , %2 ]
799+ %7 = phi i64 [ %28 , %5 ], [ 0 , %2 ]
800+ %8 = getelementptr inbounds i8 , i8* %0 , i64 %6
801+ %9 = getelementptr inbounds i8 , i8* %8 , i64 1
802+ %10 = bitcast i8* %9 to i32*
803+ %11 = load i32 , i32* %10 , align 4
804+ %12 = sext i32 %11 to i64
805+ %13 = getelementptr inbounds i8 , i8* %8 , i64 2
806+ %14 = bitcast i8* %13 to i32*
807+ %15 = load i32 , i32* %14 , align 4
808+ %16 = sext i32 %15 to i64
809+ %17 = getelementptr inbounds i8 , i8* %8 , i64 6
810+ %18 = bitcast i8* %17 to i32*
811+ %19 = load i32 , i32* %18 , align 4
812+ %20 = sext i32 %19 to i64
813+ %21 = getelementptr inbounds i8 , i8* %8 , i64 10
814+ %22 = bitcast i8* %21 to i32*
815+ %23 = load i32 , i32* %22 , align 4
816+ %24 = sext i32 %23 to i64
817+ %25 = mul nsw i64 %16 , %12
818+ %26 = mul nsw i64 %25 , %20
819+ %27 = mul nsw i64 %26 , %24
820+ %28 = add nsw i64 %27 , %7
821+ %29 = add nuw nsw i64 %6 , 1
822+ %30 = icmp eq i64 %29 , %3
823+ br i1 %30 , label %31 , label %5
824+
825+ 31 : ; preds = %5, %2
826+ %32 = phi i64 [ 0 , %2 ], [ %28 , %5 ]
827+ %33 = add nsw i64 %32 , %3
828+ ret i64 %33
829+ }
0 commit comments