[NFC][SCEV] Add some more ptrtoint/PR46786 -related tests
This commit is contained in:
		
							parent
							
								
									b9e789447f
								
							
						
					
					
						commit
						bd6d41f52e
					
				| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
 | 
			
		||||
; RUN: opt < %s --data-layout="e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -S -analyze -enable-new-pm=0 -scalar-evolution | FileCheck --check-prefixes=ALL,X64 %s
 | 
			
		||||
; RUN: opt < %s --data-layout="e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=ALL,X64 %s
 | 
			
		||||
; RUN: opt < %s --data-layout="e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128" -S -analyze -enable-new-pm=0 -scalar-evolution | FileCheck --check-prefixes=ALL,X32 %s
 | 
			
		||||
; RUN: opt < %s --data-layout="e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=ALL,X32 %s
 | 
			
		||||
 | 
			
		||||
; In general, we can't deal with ashr.
 | 
			
		||||
define i32 @t0(i32 %x, i32 %y) {
 | 
			
		||||
; ALL-LABEL: 't0'
 | 
			
		||||
; ALL-NEXT:  Classifying expressions for: @t0
 | 
			
		||||
; ALL-NEXT:    %i0 = ashr i32 %x, %y
 | 
			
		||||
; ALL-NEXT:    --> %i0 U: full-set S: full-set
 | 
			
		||||
; ALL-NEXT:  Determining loop execution counts for: @t0
 | 
			
		||||
;
 | 
			
		||||
  %i0 = ashr i32 %x, %y
 | 
			
		||||
  ret i32 %i0
 | 
			
		||||
}
 | 
			
		||||
; Not even if we know it's exact
 | 
			
		||||
define i32 @t1(i32 %x, i32 %y) {
 | 
			
		||||
; ALL-LABEL: 't1'
 | 
			
		||||
; ALL-NEXT:  Classifying expressions for: @t1
 | 
			
		||||
; ALL-NEXT:    %i0 = ashr exact i32 %x, %y
 | 
			
		||||
; ALL-NEXT:    --> %i0 U: full-set S: full-set
 | 
			
		||||
; ALL-NEXT:  Determining loop execution counts for: @t1
 | 
			
		||||
;
 | 
			
		||||
  %i0 = ashr exact i32 %x, %y
 | 
			
		||||
  ret i32 %i0
 | 
			
		||||
}
 | 
			
		||||
; Not even if the shift amount is a constant.
 | 
			
		||||
define i32 @t2(i32 %x, i32 %y) {
 | 
			
		||||
; ALL-LABEL: 't2'
 | 
			
		||||
; ALL-NEXT:  Classifying expressions for: @t2
 | 
			
		||||
; ALL-NEXT:    %i0 = ashr i32 %x, 4
 | 
			
		||||
; ALL-NEXT:    --> %i0 U: full-set S: [-134217728,134217728)
 | 
			
		||||
; ALL-NEXT:  Determining loop execution counts for: @t2
 | 
			
		||||
;
 | 
			
		||||
  %i0 = ashr i32 %x, 4
 | 
			
		||||
  ret i32 %i0
 | 
			
		||||
}
 | 
			
		||||
; However, if it's a constant AND the shift is exact, we can model it!
 | 
			
		||||
define i32 @t3(i32 %x, i32 %y) {
 | 
			
		||||
; ALL-LABEL: 't3'
 | 
			
		||||
; ALL-NEXT:  Classifying expressions for: @t3
 | 
			
		||||
; ALL-NEXT:    %i0 = ashr exact i32 %x, 4
 | 
			
		||||
; ALL-NEXT:    --> %i0 U: full-set S: [-134217728,134217728)
 | 
			
		||||
; ALL-NEXT:  Determining loop execution counts for: @t3
 | 
			
		||||
;
 | 
			
		||||
  %i0 = ashr exact i32 %x, 4
 | 
			
		||||
  ret i32 %i0
 | 
			
		||||
}
 | 
			
		||||
; As long as the shift amount is in-bounds
 | 
			
		||||
define i32 @t4(i32 %x, i32 %y) {
 | 
			
		||||
; ALL-LABEL: 't4'
 | 
			
		||||
; ALL-NEXT:  Classifying expressions for: @t4
 | 
			
		||||
; ALL-NEXT:    %i0 = ashr exact i32 %x, 32
 | 
			
		||||
; ALL-NEXT:    --> %i0 U: full-set S: full-set
 | 
			
		||||
; ALL-NEXT:  Determining loop execution counts for: @t4
 | 
			
		||||
;
 | 
			
		||||
  %i0 = ashr exact i32 %x, 32
 | 
			
		||||
  ret i32 %i0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; One more test, just to see that we model constant correctly
 | 
			
		||||
define i32 @t5(i32 %x, i32 %y) {
 | 
			
		||||
; ALL-LABEL: 't5'
 | 
			
		||||
; ALL-NEXT:  Classifying expressions for: @t5
 | 
			
		||||
; ALL-NEXT:    %i0 = ashr exact i32 %x, 5
 | 
			
		||||
; ALL-NEXT:    --> %i0 U: full-set S: [-67108864,67108864)
 | 
			
		||||
; ALL-NEXT:  Determining loop execution counts for: @t5
 | 
			
		||||
;
 | 
			
		||||
  %i0 = ashr exact i32 %x, 5
 | 
			
		||||
  ret i32 %i0
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -237,3 +237,174 @@ define void @ptrtoint_of_bitcast_of_gep(i8* %in, i64* %out0) {
 | 
			
		|||
  store i64 %p0, i64* %out0
 | 
			
		||||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; void pr46786_c26_char(char* start, char *end, char *other) {
 | 
			
		||||
;   for (char* cur = start; cur != end; ++cur)
 | 
			
		||||
;     other[cur - start] += *cur;
 | 
			
		||||
; }
 | 
			
		||||
define void @pr46786_c26_char(i8* %arg, i8* %arg1, i8* %arg2) {
 | 
			
		||||
; X64-LABEL: 'pr46786_c26_char'
 | 
			
		||||
; X64-NEXT:  Classifying expressions for: @pr46786_c26_char
 | 
			
		||||
; X64-NEXT:    %i4 = ptrtoint i8* %arg to i64
 | 
			
		||||
; X64-NEXT:    --> %i4 U: full-set S: full-set
 | 
			
		||||
; X64-NEXT:    %i7 = phi i8* [ %arg, %bb3 ], [ %i14, %bb6 ]
 | 
			
		||||
; X64-NEXT:    --> {%arg,+,1}<nuw><%bb6> U: full-set S: full-set Exits: (-1 + %arg1) LoopDispositions: { %bb6: Computable }
 | 
			
		||||
; X64-NEXT:    %i8 = load i8, i8* %i7, align 1
 | 
			
		||||
; X64-NEXT:    --> %i8 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i9 = ptrtoint i8* %i7 to i64
 | 
			
		||||
; X64-NEXT:    --> %i9 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i10 = sub i64 %i9, %i4
 | 
			
		||||
; X64-NEXT:    --> ((-1 * %i4) + %i9) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i11 = getelementptr inbounds i8, i8* %arg2, i64 %i10
 | 
			
		||||
; X64-NEXT:    --> ((-1 * %i4) + %i9 + %arg2) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i12 = load i8, i8* %i11, align 1
 | 
			
		||||
; X64-NEXT:    --> %i12 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i13 = add i8 %i12, %i8
 | 
			
		||||
; X64-NEXT:    --> (%i12 + %i8) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i14 = getelementptr inbounds i8, i8* %i7, i64 1
 | 
			
		||||
; X64-NEXT:    --> {(1 + %arg)<nsw>,+,1}<nuw><%bb6> U: full-set S: full-set Exits: %arg1 LoopDispositions: { %bb6: Computable }
 | 
			
		||||
; X64-NEXT:  Determining loop execution counts for: @pr46786_c26_char
 | 
			
		||||
; X64-NEXT:  Loop %bb6: backedge-taken count is (-1 + (-1 * %arg) + %arg1)
 | 
			
		||||
; X64-NEXT:  Loop %bb6: max backedge-taken count is -2
 | 
			
		||||
; X64-NEXT:  Loop %bb6: Predicated backedge-taken count is (-1 + (-1 * %arg) + %arg1)
 | 
			
		||||
; X64-NEXT:   Predicates:
 | 
			
		||||
; X64:       Loop %bb6: Trip multiple is 1
 | 
			
		||||
;
 | 
			
		||||
; X32-LABEL: 'pr46786_c26_char'
 | 
			
		||||
; X32-NEXT:  Classifying expressions for: @pr46786_c26_char
 | 
			
		||||
; X32-NEXT:    %i4 = ptrtoint i8* %arg to i64
 | 
			
		||||
; X32-NEXT:    --> %i4 U: [0,4294967296) S: [-4294967296,4294967296)
 | 
			
		||||
; X32-NEXT:    %i7 = phi i8* [ %arg, %bb3 ], [ %i14, %bb6 ]
 | 
			
		||||
; X32-NEXT:    --> {%arg,+,1}<nuw><%bb6> U: full-set S: full-set Exits: (-1 + %arg1) LoopDispositions: { %bb6: Computable }
 | 
			
		||||
; X32-NEXT:    %i8 = load i8, i8* %i7, align 1
 | 
			
		||||
; X32-NEXT:    --> %i8 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i9 = ptrtoint i8* %i7 to i64
 | 
			
		||||
; X32-NEXT:    --> %i9 U: [0,4294967296) S: [-4294967296,4294967296) Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i10 = sub i64 %i9, %i4
 | 
			
		||||
; X32-NEXT:    --> ((-1 * %i4)<nsw> + %i9) U: [-4294967295,4294967296) S: [-8589934591,8589934592) Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i11 = getelementptr inbounds i8, i8* %arg2, i64 %i10
 | 
			
		||||
; X32-NEXT:    --> ((trunc i64 %i9 to i32) + (-1 * (trunc i64 %i4 to i32)) + %arg2) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i12 = load i8, i8* %i11, align 1
 | 
			
		||||
; X32-NEXT:    --> %i12 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i13 = add i8 %i12, %i8
 | 
			
		||||
; X32-NEXT:    --> (%i12 + %i8) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i14 = getelementptr inbounds i8, i8* %i7, i64 1
 | 
			
		||||
; X32-NEXT:    --> {(1 + %arg)<nsw>,+,1}<nuw><%bb6> U: full-set S: full-set Exits: %arg1 LoopDispositions: { %bb6: Computable }
 | 
			
		||||
; X32-NEXT:  Determining loop execution counts for: @pr46786_c26_char
 | 
			
		||||
; X32-NEXT:  Loop %bb6: backedge-taken count is (-1 + (-1 * %arg) + %arg1)
 | 
			
		||||
; X32-NEXT:  Loop %bb6: max backedge-taken count is -2
 | 
			
		||||
; X32-NEXT:  Loop %bb6: Predicated backedge-taken count is (-1 + (-1 * %arg) + %arg1)
 | 
			
		||||
; X32-NEXT:   Predicates:
 | 
			
		||||
; X32:       Loop %bb6: Trip multiple is 1
 | 
			
		||||
;
 | 
			
		||||
  %i = icmp eq i8* %arg, %arg1
 | 
			
		||||
  br i1 %i, label %bb5, label %bb3
 | 
			
		||||
 | 
			
		||||
bb3:
 | 
			
		||||
  %i4 = ptrtoint i8* %arg to i64
 | 
			
		||||
  br label %bb6
 | 
			
		||||
 | 
			
		||||
bb6:
 | 
			
		||||
  %i7 = phi i8* [ %arg, %bb3 ], [ %i14, %bb6 ]
 | 
			
		||||
  %i8 = load i8, i8* %i7
 | 
			
		||||
  %i9 = ptrtoint i8* %i7 to i64
 | 
			
		||||
  %i10 = sub i64 %i9, %i4
 | 
			
		||||
  %i11 = getelementptr inbounds i8, i8* %arg2, i64 %i10
 | 
			
		||||
  %i12 = load i8, i8* %i11
 | 
			
		||||
  %i13 = add i8 %i12, %i8
 | 
			
		||||
  store i8 %i13, i8* %i11
 | 
			
		||||
  %i14 = getelementptr inbounds i8, i8* %i7, i64 1
 | 
			
		||||
  %i15 = icmp eq i8* %i14, %arg1
 | 
			
		||||
  br i1 %i15, label %bb5, label %bb6
 | 
			
		||||
 | 
			
		||||
bb5:
 | 
			
		||||
  ret void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; void pr46786_c26_int(int* start, int *end, int *other) {
 | 
			
		||||
;   for (int* cur = start; cur != end; ++cur)
 | 
			
		||||
;     other[cur - start] += *cur;
 | 
			
		||||
; }
 | 
			
		||||
define void @pr46786_c26_int(i32* %arg, i32* %arg1, i32* %arg2) {
 | 
			
		||||
; X64-LABEL: 'pr46786_c26_int'
 | 
			
		||||
; X64-NEXT:  Classifying expressions for: @pr46786_c26_int
 | 
			
		||||
; X64-NEXT:    %i4 = ptrtoint i32* %arg to i64
 | 
			
		||||
; X64-NEXT:    --> %i4 U: full-set S: full-set
 | 
			
		||||
; X64-NEXT:    %i7 = phi i32* [ %arg, %bb3 ], [ %i15, %bb6 ]
 | 
			
		||||
; X64-NEXT:    --> {%arg,+,4}<nuw><%bb6> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * %arg) + %arg1) /u 4))<nuw> + %arg) LoopDispositions: { %bb6: Computable }
 | 
			
		||||
; X64-NEXT:    %i8 = load i32, i32* %i7, align 4
 | 
			
		||||
; X64-NEXT:    --> %i8 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i9 = ptrtoint i32* %i7 to i64
 | 
			
		||||
; X64-NEXT:    --> %i9 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i10 = sub i64 %i9, %i4
 | 
			
		||||
; X64-NEXT:    --> ((-1 * %i4) + %i9) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i11 = ashr exact i64 %i10, 2
 | 
			
		||||
; X64-NEXT:    --> %i11 U: full-set S: [-2305843009213693952,2305843009213693952) Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i12 = getelementptr inbounds i32, i32* %arg2, i64 %i11
 | 
			
		||||
; X64-NEXT:    --> ((4 * %i11)<nsw> + %arg2)<nsw> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i13 = load i32, i32* %i12, align 4
 | 
			
		||||
; X64-NEXT:    --> %i13 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i14 = add nsw i32 %i13, %i8
 | 
			
		||||
; X64-NEXT:    --> (%i13 + %i8) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X64-NEXT:    %i15 = getelementptr inbounds i32, i32* %i7, i64 1
 | 
			
		||||
; X64-NEXT:    --> {(4 + %arg)<nsw>,+,4}<nuw><%bb6> U: full-set S: full-set Exits: (4 + (4 * ((-4 + (-1 * %arg) + %arg1) /u 4))<nuw> + %arg) LoopDispositions: { %bb6: Computable }
 | 
			
		||||
; X64-NEXT:  Determining loop execution counts for: @pr46786_c26_int
 | 
			
		||||
; X64-NEXT:  Loop %bb6: backedge-taken count is ((-4 + (-1 * %arg) + %arg1) /u 4)
 | 
			
		||||
; X64-NEXT:  Loop %bb6: max backedge-taken count is 4611686018427387903
 | 
			
		||||
; X64-NEXT:  Loop %bb6: Predicated backedge-taken count is ((-4 + (-1 * %arg) + %arg1) /u 4)
 | 
			
		||||
; X64-NEXT:   Predicates:
 | 
			
		||||
; X64:       Loop %bb6: Trip multiple is 1
 | 
			
		||||
;
 | 
			
		||||
; X32-LABEL: 'pr46786_c26_int'
 | 
			
		||||
; X32-NEXT:  Classifying expressions for: @pr46786_c26_int
 | 
			
		||||
; X32-NEXT:    %i4 = ptrtoint i32* %arg to i64
 | 
			
		||||
; X32-NEXT:    --> %i4 U: [0,4294967296) S: [-4294967296,4294967296)
 | 
			
		||||
; X32-NEXT:    %i7 = phi i32* [ %arg, %bb3 ], [ %i15, %bb6 ]
 | 
			
		||||
; X32-NEXT:    --> {%arg,+,4}<nuw><%bb6> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * %arg) + %arg1) /u 4))<nuw> + %arg) LoopDispositions: { %bb6: Computable }
 | 
			
		||||
; X32-NEXT:    %i8 = load i32, i32* %i7, align 4
 | 
			
		||||
; X32-NEXT:    --> %i8 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i9 = ptrtoint i32* %i7 to i64
 | 
			
		||||
; X32-NEXT:    --> %i9 U: [0,4294967296) S: [-4294967296,4294967296) Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i10 = sub i64 %i9, %i4
 | 
			
		||||
; X32-NEXT:    --> ((-1 * %i4)<nsw> + %i9) U: [-4294967295,4294967296) S: [-8589934591,8589934592) Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i11 = ashr exact i64 %i10, 2
 | 
			
		||||
; X32-NEXT:    --> %i11 U: full-set S: [-2147483648,2147483648) Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i12 = getelementptr inbounds i32, i32* %arg2, i64 %i11
 | 
			
		||||
; X32-NEXT:    --> ((4 * (trunc i64 %i11 to i32))<nsw> + %arg2)<nsw> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i13 = load i32, i32* %i12, align 4
 | 
			
		||||
; X32-NEXT:    --> %i13 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i14 = add nsw i32 %i13, %i8
 | 
			
		||||
; X32-NEXT:    --> (%i13 + %i8) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb6: Variant }
 | 
			
		||||
; X32-NEXT:    %i15 = getelementptr inbounds i32, i32* %i7, i64 1
 | 
			
		||||
; X32-NEXT:    --> {(4 + %arg)<nsw>,+,4}<nuw><%bb6> U: full-set S: full-set Exits: (4 + (4 * ((-4 + (-1 * %arg) + %arg1) /u 4))<nuw> + %arg) LoopDispositions: { %bb6: Computable }
 | 
			
		||||
; X32-NEXT:  Determining loop execution counts for: @pr46786_c26_int
 | 
			
		||||
; X32-NEXT:  Loop %bb6: backedge-taken count is ((-4 + (-1 * %arg) + %arg1) /u 4)
 | 
			
		||||
; X32-NEXT:  Loop %bb6: max backedge-taken count is 1073741823
 | 
			
		||||
; X32-NEXT:  Loop %bb6: Predicated backedge-taken count is ((-4 + (-1 * %arg) + %arg1) /u 4)
 | 
			
		||||
; X32-NEXT:   Predicates:
 | 
			
		||||
; X32:       Loop %bb6: Trip multiple is 1
 | 
			
		||||
;
 | 
			
		||||
  %i = icmp eq i32* %arg, %arg1
 | 
			
		||||
  br i1 %i, label %bb5, label %bb3
 | 
			
		||||
 | 
			
		||||
bb3:
 | 
			
		||||
  %i4 = ptrtoint i32* %arg to i64
 | 
			
		||||
  br label %bb6
 | 
			
		||||
 | 
			
		||||
bb6:
 | 
			
		||||
  %i7 = phi i32* [ %arg, %bb3 ], [ %i15, %bb6 ]
 | 
			
		||||
  %i8 = load i32, i32* %i7
 | 
			
		||||
  %i9 = ptrtoint i32* %i7 to i64
 | 
			
		||||
  %i10 = sub i64 %i9, %i4
 | 
			
		||||
  %i11 = ashr exact i64 %i10, 2
 | 
			
		||||
  %i12 = getelementptr inbounds i32, i32* %arg2, i64 %i11
 | 
			
		||||
  %i13 = load i32, i32* %i12
 | 
			
		||||
  %i14 = add nsw i32 %i13, %i8
 | 
			
		||||
  store i32 %i14, i32* %i12
 | 
			
		||||
  %i15 = getelementptr inbounds i32, i32* %i7, i64 1
 | 
			
		||||
  %i16 = icmp eq i32* %i15, %arg1
 | 
			
		||||
  br i1 %i16, label %bb5, label %bb6
 | 
			
		||||
 | 
			
		||||
bb5:
 | 
			
		||||
  ret void
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue