[SCEV] Add additional tests for vscale (NFC)
authorNikita Popov <npopov@redhat.com>
Thu, 16 Mar 2023 10:03:36 +0000 (11:03 +0100)
committerNikita Popov <npopov@redhat.com>
Thu, 16 Mar 2023 10:05:49 +0000 (11:05 +0100)
llvm/test/Analysis/ScalarEvolution/scalable-vector.ll

index b5bd724cb269c13b655a30f3040ce5d646268c32..3bc709ef026d4e7e68a420a77174385de17d51fa 100644 (file)
@@ -1,16 +1,76 @@
 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
 ; RUN: opt "-passes=print<scalar-evolution>" -disable-output < %s 2>&1 | FileCheck %s
 
-define void @a(ptr %p) {
-; CHECK-LABEL: 'a'
-; CHECK-NEXT:  Classifying expressions for: @a
+define void @vscale_gep(ptr %p) {
+; CHECK-LABEL: 'vscale_gep'
+; CHECK-NEXT:  Classifying expressions for: @vscale_gep
 ; CHECK-NEXT:    %1 = getelementptr <vscale x 4 x i32>, ptr null, i32 3
 ; CHECK-NEXT:    --> ((48 * vscale) + null) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
 ; CHECK-NEXT:    %2 = getelementptr <vscale x 1 x i64>, ptr %p, i32 1
 ; CHECK-NEXT:    --> ((8 * vscale) + %p) U: full-set S: full-set
-; CHECK-NEXT:  Determining loop execution counts for: @a
+; CHECK-NEXT:  Determining loop execution counts for: @vscale_gep
 ;
   getelementptr <vscale x 4 x i32>, ptr null, i32 3
   getelementptr <vscale x 1 x i64>, ptr %p, i32 1
   ret void
 }
+
+define void @vscale_gep_range(ptr %p) vscale_range(2, 16) {
+; CHECK-LABEL: 'vscale_gep_range'
+; CHECK-NEXT:  Classifying expressions for: @vscale_gep_range
+; CHECK-NEXT:    %1 = getelementptr <vscale x 4 x i32>, ptr null, i32 3
+; CHECK-NEXT:    --> ((48 * vscale) + null) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
+; CHECK-NEXT:    %2 = getelementptr <vscale x 1 x i64>, ptr %p, i32 1
+; CHECK-NEXT:    --> ((8 * vscale) + %p) U: full-set S: full-set
+; CHECK-NEXT:  Determining loop execution counts for: @vscale_gep_range
+;
+  getelementptr <vscale x 4 x i32>, ptr null, i32 3
+  getelementptr <vscale x 1 x i64>, ptr %p, i32 1
+  ret void
+}
+
+define i64 @vscale_no_range() {
+; CHECK-LABEL: 'vscale_no_range'
+; CHECK-NEXT:  Classifying expressions for: @vscale_no_range
+; CHECK-NEXT:    %vscale = call i64 @llvm.vscale.i64()
+; CHECK-NEXT:    --> %vscale U: [1,0) S: [1,0)
+; CHECK-NEXT:  Determining loop execution counts for: @vscale_no_range
+;
+  %vscale = call i64 @llvm.vscale.i64()
+  ret i64 %vscale
+}
+
+define i64 @vscale_min_max_range() vscale_range(2, 16) {
+; CHECK-LABEL: 'vscale_min_max_range'
+; CHECK-NEXT:  Classifying expressions for: @vscale_min_max_range
+; CHECK-NEXT:    %vscale = call i64 @llvm.vscale.i64()
+; CHECK-NEXT:    --> %vscale U: [1,32) S: [1,32)
+; CHECK-NEXT:  Determining loop execution counts for: @vscale_min_max_range
+;
+  %vscale = call i64 @llvm.vscale.i64()
+  ret i64 %vscale
+}
+
+define i64 @vscale_min_range() vscale_range(2, 0) {
+; CHECK-LABEL: 'vscale_min_range'
+; CHECK-NEXT:  Classifying expressions for: @vscale_min_range
+; CHECK-NEXT:    %vscale = call i64 @llvm.vscale.i64()
+; CHECK-NEXT:    --> %vscale U: [1,0) S: [1,0)
+; CHECK-NEXT:  Determining loop execution counts for: @vscale_min_range
+;
+  %vscale = call i64 @llvm.vscale.i64()
+  ret i64 %vscale
+}
+
+define i64 @vscale_exact_range() vscale_range(2) {
+; CHECK-LABEL: 'vscale_exact_range'
+; CHECK-NEXT:  Classifying expressions for: @vscale_exact_range
+; CHECK-NEXT:    %vscale = call i64 @llvm.vscale.i64()
+; CHECK-NEXT:    --> %vscale U: [2,3) S: [2,3)
+; CHECK-NEXT:  Determining loop execution counts for: @vscale_exact_range
+;
+  %vscale = call i64 @llvm.vscale.i64()
+  ret i64 %vscale
+}
+
+declare i64 @llvm.vscale.i64()