@@ -8,57 +8,62 @@ define i32 @test(i32 %size, ptr %add.ptr, i64 %const) {
8
8
; RV32-LABEL: test:
9
9
; RV32: # %bb.0: # %entry
10
10
; RV32-NEXT: th.lbib a3, (a1), -1, 0
11
- ; RV32-NEXT: th.lrb a0, a1, a0, 0
12
11
; RV32-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
13
12
; RV32-NEXT: vmv.v.x v8, a3
14
- ; RV32-NEXT: addi a1, a2, 1
13
+ ; RV32-NEXT: addi a3, a2, 1
14
+ ; RV32-NEXT: addi a4, a0, 1
15
15
; RV32-NEXT: .LBB0_1: # %for.body
16
16
; RV32-NEXT: # =>This Inner Loop Header: Depth=1
17
+ ; RV32-NEXT: th.lrb a0, a1, a0, 0
17
18
; RV32-NEXT: vmv.s.x v9, zero
18
19
; RV32-NEXT: vmv1r.v v10, v8
19
- ; RV32-NEXT: vsetvli zero, a1 , e8, mf2, tu, ma
20
+ ; RV32-NEXT: vsetvli zero, a3 , e8, mf2, tu, ma
20
21
; RV32-NEXT: vslideup.vx v10, v9, a2
21
22
; RV32-NEXT: vsetivli zero, 8, e8, mf2, tu, ma
22
23
; RV32-NEXT: vmv.s.x v10, a0
23
24
; RV32-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
24
25
; RV32-NEXT: vmseq.vi v9, v10, 0
25
- ; RV32-NEXT: vmv.x.s a3, v9
26
- ; RV32-NEXT: andi a3, a3, 255
27
- ; RV32-NEXT: bnez a3, .LBB0_1
26
+ ; RV32-NEXT: vmv.x.s a0, v9
27
+ ; RV32-NEXT: andi a5, a0, 255
28
+ ; RV32-NEXT: mv a0, a4
29
+ ; RV32-NEXT: bnez a5, .LBB0_1
28
30
; RV32-NEXT: # %bb.2: # %if.then381
29
31
; RV32-NEXT: li a0, 0
30
32
; RV32-NEXT: ret
31
33
;
32
34
; RV64-LABEL: test:
33
35
; RV64: # %bb.0: # %entry
34
36
; RV64-NEXT: th.lbib a3, (a1), -1, 0
35
- ; RV64-NEXT: sext.w a0, a0
36
- ; RV64-NEXT: th.lrb a0, a1, a0, 0
37
37
; RV64-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
38
38
; RV64-NEXT: vmv.v.x v8, a3
39
- ; RV64-NEXT: addi a1, a2, 1
39
+ ; RV64-NEXT: addi a3, a2, 1
40
+ ; RV64-NEXT: addi a4, a0, 1
40
41
; RV64-NEXT: .LBB0_1: # %for.body
41
42
; RV64-NEXT: # =>This Inner Loop Header: Depth=1
43
+ ; RV64-NEXT: sext.w a0, a0
44
+ ; RV64-NEXT: th.lrb a0, a1, a0, 0
42
45
; RV64-NEXT: vmv.s.x v9, zero
43
46
; RV64-NEXT: vmv1r.v v10, v8
44
- ; RV64-NEXT: vsetvli zero, a1 , e8, mf2, tu, ma
47
+ ; RV64-NEXT: vsetvli zero, a3 , e8, mf2, tu, ma
45
48
; RV64-NEXT: vslideup.vx v10, v9, a2
46
49
; RV64-NEXT: vsetivli zero, 8, e8, mf2, tu, ma
47
50
; RV64-NEXT: vmv.s.x v10, a0
48
51
; RV64-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
49
52
; RV64-NEXT: vmseq.vi v9, v10, 0
50
- ; RV64-NEXT: vmv.x.s a3, v9
51
- ; RV64-NEXT: andi a3, a3, 255
52
- ; RV64-NEXT: bnez a3, .LBB0_1
53
+ ; RV64-NEXT: vmv.x.s a0, v9
54
+ ; RV64-NEXT: andi a5, a0, 255
55
+ ; RV64-NEXT: mv a0, a4
56
+ ; RV64-NEXT: bnez a5, .LBB0_1
53
57
; RV64-NEXT: # %bb.2: # %if.then381
54
58
; RV64-NEXT: li a0, 0
55
59
; RV64-NEXT: ret
56
60
entry:
57
61
br label %for.body
58
62
59
63
for.body: ; preds = %for.body, %entry
64
+ %size.actual = phi i32 [%size , %entry ], [%size.inc , %for.body ]
60
65
%add.ptr1 = getelementptr i8 , ptr %add.ptr , i32 -1
61
- %add.ptr2 = getelementptr i8 , ptr %add.ptr1 , i32 %size
66
+ %add.ptr2 = getelementptr i8 , ptr %add.ptr1 , i32 %size.actual
62
67
%0 = load i8 , ptr %add.ptr1 , align 1
63
68
%1 = load i8 , ptr %add.ptr2 , align 1
64
69
%2 = insertelement <8 x i8 > poison, i8 %0 , i64 0
@@ -68,6 +73,7 @@ for.body: ; preds = %for.body, %entry
68
73
%6 = bitcast <8 x i1 > %5 to i8
69
74
%7 = zext i8 %6 to i32
70
75
%cond = icmp eq i32 %7 , 0
76
+ %size.inc = add i32 %size , 1
71
77
br i1 %cond , label %if.then381 , label %for.body
72
78
73
79
if.then381: ; preds = %for.body
0 commit comments