[llvm] 41519b3 - [SCEV] Add UDiv canonicalization tests with nested AddRecs.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 2 14:18:40 PST 2025
Author: Florian Hahn
Date: 2025-12-02T22:18:16Z
New Revision: 41519b390fa1ae90221af33342d24fd4caa4734f
URL: https://github.com/llvm/llvm-project/commit/41519b390fa1ae90221af33342d24fd4caa4734f
DIFF: https://github.com/llvm/llvm-project/commit/41519b390fa1ae90221af33342d24fd4caa4734f.diff
LOG: [SCEV] Add UDiv canonicalization tests with nested AddRecs.
Add more tests for follow-up to
https://github.com/llvm/llvm-project/pull/169576.
Added:
Modified:
llvm/test/Analysis/ScalarEvolution/addrec-may-wrap-udiv-canonicalize.ll
Removed:
################################################################################
diff --git a/llvm/test/Analysis/ScalarEvolution/addrec-may-wrap-udiv-canonicalize.ll b/llvm/test/Analysis/ScalarEvolution/addrec-may-wrap-udiv-canonicalize.ll
index ffae5d38a7d8f..9a9a6a7d45931 100644
--- a/llvm/test/Analysis/ScalarEvolution/addrec-may-wrap-udiv-canonicalize.ll
+++ b/llvm/test/Analysis/ScalarEvolution/addrec-may-wrap-udiv-canonicalize.ll
@@ -167,3 +167,236 @@ loop:
exit:
ret void
}
+
+define void @test_step2_start_outer_add_rec_step_16(i64 %n, i64 %m) {
+; CHECK-LABEL: 'test_step2_start_outer_add_rec_step_16'
+; CHECK-NEXT: Classifying expressions for: @test_step2_start_outer_add_rec_step_16
+; CHECK-NEXT: %outer.iv = phi i64 [ 0, %entry ], [ %outer.iv.next, %outer.latch ]
+; CHECK-NEXT: --> {0,+,16}<%outer.header> U: [0,-15) S: [-9223372036854775808,9223372036854775793) Exits: <<Unknown>> LoopDispositions: { %outer.header: Computable, %loop: Invariant }
+; CHECK-NEXT: %iv = phi i64 [ %outer.iv, %outer.header ], [ %iv.next, %loop ]
+; CHECK-NEXT: --> {{\{\{}}0,+,16}<%outer.header>,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.0 = udiv i64 %iv, 4
+; CHECK-NEXT: --> ({{\{\{}}0,+,16}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.1 = add i64 %iv, 1
+; CHECK-NEXT: --> {{\{\{}}1,+,16}<%outer.header>,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.1 = udiv i64 %iv.1, 4
+; CHECK-NEXT: --> ({{\{\{}}1,+,16}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.2 = add i64 %iv, 2
+; CHECK-NEXT: --> {{\{\{}}2,+,16}<%outer.header>,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.2 = udiv i64 %iv.2, 4
+; CHECK-NEXT: --> ({{\{\{}}2,+,16}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.3 = add i64 %iv, 3
+; CHECK-NEXT: --> {{\{\{}}3,+,16}<%outer.header>,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.3 = udiv i64 %iv.3, 4
+; CHECK-NEXT: --> ({{\{\{}}3,+,16}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.4 = add i64 %iv, 4
+; CHECK-NEXT: --> {{\{\{}}4,+,16}<%outer.header>,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.4 = udiv i64 %iv.4, 4
+; CHECK-NEXT: --> ({{\{\{}}4,+,16}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.5 = add i64 %iv, 5
+; CHECK-NEXT: --> {{\{\{}}5,+,16}<%outer.header>,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.5 = udiv i64 %iv.5, 4
+; CHECK-NEXT: --> ({{\{\{}}5,+,16}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.neg.1 = add i64 %iv, -1
+; CHECK-NEXT: --> {{\{\{}}-1,+,16}<%outer.header>,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.neg.1 = udiv i64 %iv.neg.1, 4
+; CHECK-NEXT: --> ({{\{\{}}-1,+,16}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.0 = udiv i64 %iv, 3
+; CHECK-NEXT: --> ({{\{\{}}0,+,16}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517205) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.1 = udiv i64 %iv.1, 3
+; CHECK-NEXT: --> ({{\{\{}}1,+,16}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517206) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.2 = udiv i64 %iv.2, 3
+; CHECK-NEXT: --> ({{\{\{}}2,+,16}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517205) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.4 = udiv i64 %iv.4, 3
+; CHECK-NEXT: --> ({{\{\{}}4,+,16}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517205) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.5 = udiv i64 %iv.5, 3
+; CHECK-NEXT: --> ({{\{\{}}5,+,16}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517206) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.next = add i64 %iv, 2
+; CHECK-NEXT: --> {{\{\{}}2,+,16}<%outer.header>,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %outer.iv.next = add i64 %outer.iv, 16
+; CHECK-NEXT: --> {16,+,16}<%outer.header> U: [0,-15) S: [-9223372036854775808,9223372036854775793) Exits: <<Unknown>> LoopDispositions: { %outer.header: Computable, %loop: Invariant }
+; CHECK-NEXT: Determining loop execution counts for: @test_step2_start_outer_add_rec_step_16
+; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
+; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
+; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
+; CHECK-NEXT: Loop %outer.header: Unpredictable backedge-taken count.
+; CHECK-NEXT: Loop %outer.header: Unpredictable constant max backedge-taken count.
+; CHECK-NEXT: Loop %outer.header: Unpredictable symbolic max backedge-taken count.
+; CHECK-NEXT: Loop %outer.header: Predicated backedge-taken count is (%m /u 16)
+; CHECK-NEXT: Predicates:
+; CHECK-NEXT: Equal predicate: (zext i4 (trunc i64 %m to i4) to i64) == 0
+; CHECK-NEXT: Loop %outer.header: Predicated constant max backedge-taken count is i64 1152921504606846975
+; CHECK-NEXT: Predicates:
+; CHECK-NEXT: Equal predicate: (zext i4 (trunc i64 %m to i4) to i64) == 0
+; CHECK-NEXT: Loop %outer.header: Predicated symbolic max backedge-taken count is (%m /u 16)
+; CHECK-NEXT: Predicates:
+; CHECK-NEXT: Equal predicate: (zext i4 (trunc i64 %m to i4) to i64) == 0
+;
+entry:
+ br label %outer.header
+
+outer.header:
+ %outer.iv = phi i64 [ 0, %entry ], [ %outer.iv.next, %outer.latch ]
+ br label %loop
+
+loop:
+ %iv = phi i64 [ %outer.iv, %outer.header ], [ %iv.next, %loop ]
+ %div.0 = udiv i64 %iv, 4
+ call void @use(i64 %div.0)
+ %iv.1 = add i64 %iv, 1
+ %div.1 = udiv i64 %iv.1, 4
+ call void @use(i64 %div.1)
+ %iv.2 = add i64 %iv, 2
+ %div.2 = udiv i64 %iv.2, 4
+ call void @use(i64 %div.2)
+ %iv.3 = add i64 %iv, 3
+ %div.3 = udiv i64 %iv.3, 4
+ call void @use(i64 %div.3)
+ %iv.4 = add i64 %iv, 4
+ %div.4 = udiv i64 %iv.4, 4
+ call void @use(i64 %div.4)
+ %iv.5 = add i64 %iv, 5
+ %div.5 = udiv i64 %iv.5, 4
+ call void @use(i64 %div.5)
+ %iv.neg.1 = add i64 %iv, -1
+ %div.neg.1 = udiv i64 %iv.neg.1, 4
+ call void @use(i64 %div.neg.1)
+ %div3.0 = udiv i64 %iv, 3
+ call void @use(i64 %div3.0)
+ %div3.1 = udiv i64 %iv.1,3
+ call void @use(i64 %div3.1)
+ %div3.2 = udiv i64 %iv.2, 3
+ call void @use(i64 %div3.2)
+ %div3.4 = udiv i64 %iv.4, 3
+ call void @use(i64 %div3.4)
+ %div3.5 = udiv i64 %iv.5, 3
+ call void @use(i64 %div3.5)
+ %iv.next = add i64 %iv, 2
+ %cond = icmp slt i64 %iv, %n
+ br i1 %cond, label %loop, label %outer.latch
+
+outer.latch:
+ %outer.iv.next = add i64 %outer.iv, 16
+ %outer.ec = icmp eq i64 %outer.iv, %m
+ br i1 %outer.ec, label %exit, label %outer.header
+
+exit:
+ ret void
+}
+
+define void @test_step2_div4_start_outer_add_rec_step_2(i64 %n, i64 %m) {
+; CHECK-LABEL: 'test_step2_div4_start_outer_add_rec_step_2'
+; CHECK-NEXT: Classifying expressions for: @test_step2_div4_start_outer_add_rec_step_2
+; CHECK-NEXT: %outer.iv = phi i64 [ 0, %entry ], [ %outer.iv.next, %outer.latch ]
+; CHECK-NEXT: --> {0,+,2}<%outer.header> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %outer.header: Computable, %loop: Invariant }
+; CHECK-NEXT: %iv = phi i64 [ %outer.iv, %outer.header ], [ %iv.next, %loop ]
+; CHECK-NEXT: --> {{\{\{}}0,+,2}<%outer.header>,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.0 = udiv i64 %iv, 4
+; CHECK-NEXT: --> ({{\{\{}}0,+,2}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.1 = add i64 %iv, 1
+; CHECK-NEXT: --> {{\{\{}}1,+,2}<%outer.header>,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.1 = udiv i64 %iv.1, 4
+; CHECK-NEXT: --> ({{\{\{}}1,+,2}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.2 = add i64 %iv, 2
+; CHECK-NEXT: --> {{\{\{}}2,+,2}<%outer.header>,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.2 = udiv i64 %iv.2, 4
+; CHECK-NEXT: --> ({{\{\{}}2,+,2}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.3 = add i64 %iv, 3
+; CHECK-NEXT: --> {{\{\{}}3,+,2}<%outer.header>,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.3 = udiv i64 %iv.3, 4
+; CHECK-NEXT: --> ({{\{\{}}3,+,2}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.4 = add i64 %iv, 4
+; CHECK-NEXT: --> {{\{\{}}4,+,2}<%outer.header>,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.4 = udiv i64 %iv.4, 4
+; CHECK-NEXT: --> ({{\{\{}}4,+,2}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.5 = add i64 %iv, 5
+; CHECK-NEXT: --> {{\{\{}}5,+,2}<%outer.header>,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.5 = udiv i64 %iv.5, 4
+; CHECK-NEXT: --> ({{\{\{}}5,+,2}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.neg.1 = add i64 %iv, -1
+; CHECK-NEXT: --> {{\{\{}}-1,+,2}<%outer.header>,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div.neg.1 = udiv i64 %iv.neg.1, 4
+; CHECK-NEXT: --> ({{\{\{}}-1,+,2}<%outer.header>,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.0 = udiv i64 %iv, 3
+; CHECK-NEXT: --> ({{\{\{}}0,+,2}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517205) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.1 = udiv i64 %iv.1, 3
+; CHECK-NEXT: --> ({{\{\{}}1,+,2}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517206) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.2 = udiv i64 %iv.2, 3
+; CHECK-NEXT: --> ({{\{\{}}2,+,2}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517205) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.4 = udiv i64 %iv.4, 3
+; CHECK-NEXT: --> ({{\{\{}}4,+,2}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517205) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %div3.5 = udiv i64 %iv.5, 3
+; CHECK-NEXT: --> ({{\{\{}}5,+,2}<%outer.header>,+,2}<%loop> /u 3) U: [0,6148914691236517206) S: [0,6148914691236517206) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %iv.next = add i64 %iv, 2
+; CHECK-NEXT: --> {{\{\{}}2,+,2}<%outer.header>,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable, %outer.header: Variant }
+; CHECK-NEXT: %outer.iv.next = add i64 %outer.iv, 2
+; CHECK-NEXT: --> {2,+,2}<%outer.header> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %outer.header: Computable, %loop: Invariant }
+; CHECK-NEXT: Determining loop execution counts for: @test_step2_div4_start_outer_add_rec_step_2
+; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
+; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.
+; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.
+; CHECK-NEXT: Loop %outer.header: Unpredictable backedge-taken count.
+; CHECK-NEXT: Loop %outer.header: Unpredictable constant max backedge-taken count.
+; CHECK-NEXT: Loop %outer.header: Unpredictable symbolic max backedge-taken count.
+; CHECK-NEXT: Loop %outer.header: Predicated backedge-taken count is (%m /u 2)
+; CHECK-NEXT: Predicates:
+; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %m to i1) to i64) == 0
+; CHECK-NEXT: Loop %outer.header: Predicated constant max backedge-taken count is i64 9223372036854775807
+; CHECK-NEXT: Predicates:
+; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %m to i1) to i64) == 0
+; CHECK-NEXT: Loop %outer.header: Predicated symbolic max backedge-taken count is (%m /u 2)
+; CHECK-NEXT: Predicates:
+; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %m to i1) to i64) == 0
+;
+entry:
+ br label %outer.header
+
+outer.header:
+ %outer.iv = phi i64 [ 0, %entry ], [ %outer.iv.next, %outer.latch ]
+ br label %loop
+
+loop:
+ %iv = phi i64 [ %outer.iv, %outer.header ], [ %iv.next, %loop ]
+ %div.0 = udiv i64 %iv, 4
+ call void @use(i64 %div.0)
+ %iv.1 = add i64 %iv, 1
+ %div.1 = udiv i64 %iv.1, 4
+ call void @use(i64 %div.1)
+ %iv.2 = add i64 %iv, 2
+ %div.2 = udiv i64 %iv.2, 4
+ call void @use(i64 %div.2)
+ %iv.3 = add i64 %iv, 3
+ %div.3 = udiv i64 %iv.3, 4
+ call void @use(i64 %div.3)
+ %iv.4 = add i64 %iv, 4
+ %div.4 = udiv i64 %iv.4, 4
+ call void @use(i64 %div.4)
+ %iv.5 = add i64 %iv, 5
+ %div.5 = udiv i64 %iv.5, 4
+ call void @use(i64 %div.5)
+ %iv.neg.1 = add i64 %iv, -1
+ %div.neg.1 = udiv i64 %iv.neg.1, 4
+ call void @use(i64 %div.neg.1)
+ %div3.0 = udiv i64 %iv, 3
+ call void @use(i64 %div3.0)
+ %div3.1 = udiv i64 %iv.1,3
+ call void @use(i64 %div3.1)
+ %div3.2 = udiv i64 %iv.2, 3
+ call void @use(i64 %div3.2)
+ %div3.4 = udiv i64 %iv.4, 3
+ call void @use(i64 %div3.4)
+ %div3.5 = udiv i64 %iv.5, 3
+ call void @use(i64 %div3.5)
+ call void @use(i64 %div.neg.1)
+ %iv.next = add i64 %iv, 2
+ %cond = icmp slt i64 %iv, %n
+ br i1 %cond, label %loop, label %outer.latch
+
+outer.latch:
+ %outer.iv.next = add i64 %outer.iv, 2
+ %outer.ec = icmp eq i64 %outer.iv, %m
+ br i1 %outer.ec, label %exit, label %outer.header
+
+exit:
+ ret void
+}
More information about the llvm-commits
mailing list