Skip to content

[GVN] Add MemorySSA checks in tests 1/N #130261

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion llvm/test/Transforms/GVN/assume.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes=gvn -verify-analysis-invalidation -S | FileCheck %s
; RUN: opt < %s -passes=gvn -verify-analysis-invalidation -S | FileCheck --check-prefixes=CHECK,MDEP %s
; RUN: opt < %s -passes='gvn<memoryssa;no-memdep>' -verify-analysis-invalidation -S | FileCheck --check-prefixes=CHECK,MSSA %s

declare void @llvm.assume(i1)
declare void @use(i1)
Expand Down Expand Up @@ -59,3 +60,6 @@ define void @pr47496(i8 %x) {
call void @use(i1 %cmp)
ret void
}
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; MDEP: {{.*}}
; MSSA: {{.*}}
20 changes: 12 additions & 8 deletions llvm/test/Transforms/GVN/basic.ll
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
; RUN: opt < %s -passes=gvn -S | FileCheck %s
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt < %s -passes=gvn -S | FileCheck %s --check-prefixes=CHECK,MDEP
; RUN: opt < %s -passes='gvn<memoryssa;no-memdep>' -S | FileCheck --check-prefixes=CHECK,MSSA %s

define i32 @main() {
; CHECK-LABEL: define i32 @main() {
; CHECK-NEXT: [[BLOCK1:.*:]]
; CHECK-NEXT: ret i32 0
;
block1:
%z1 = bitcast i32 0 to i32
br label %block2
%z1 = bitcast i32 0 to i32
br label %block2
block2:
%z2 = bitcast i32 0 to i32
ret i32 %z2
}

; CHECK: define i32 @main() {
; CHECK-NEXT: block1:
; CHECK-NEXT: ret i32 0
; CHECK-NEXT: }
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; MDEP: {{.*}}
; MSSA: {{.*}}
55 changes: 40 additions & 15 deletions llvm/test/Transforms/GVN/nonescaping.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -S -passes=gvn 2>&1 | FileCheck %s
; RUN: opt < %s -S -passes=gvn 2>&1 | FileCheck %s --check-prefixes=CHECK,MDEP
; RUN: opt < %s -S -passes='gvn<memoryssa;no-memdep>' 2>&1 | FileCheck --check-prefixes=CHECK,MSSA %s

target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"

Expand All @@ -9,10 +10,18 @@ declare noalias ptr @_Znwm(i64)
declare void @escape(ptr)

define i8 @test_malloc(ptr %p) {
; CHECK-LABEL: @test_malloc(
; CHECK-NEXT: [[OBJ:%.*]] = call ptr @malloc(i64 16)
; CHECK-NEXT: call void @escape(ptr [[OBJ]])
; CHECK-NEXT: ret i8 0
; MDEP-LABEL: @test_malloc(
; MDEP-NEXT: [[OBJ:%.*]] = call ptr @malloc(i64 16)
; MDEP-NEXT: call void @escape(ptr [[OBJ]])
; MDEP-NEXT: ret i8 0
;
; MSSA-LABEL: @test_malloc(
; MSSA-NEXT: [[V1:%.*]] = load i8, ptr [[P:%.*]], align 1
; MSSA-NEXT: [[OBJ:%.*]] = call ptr @malloc(i64 16)
; MSSA-NEXT: [[V2:%.*]] = load i8, ptr [[P]], align 1
; MSSA-NEXT: [[SUB:%.*]] = sub i8 [[V1]], [[V2]]
; MSSA-NEXT: call void @escape(ptr [[OBJ]])
; MSSA-NEXT: ret i8 [[SUB]]
;
%v1 = load i8, ptr %p
%obj = call ptr @malloc(i64 16)
Expand All @@ -23,10 +32,18 @@ define i8 @test_malloc(ptr %p) {
}

define i8 @test_calloc(ptr %p) {
; CHECK-LABEL: @test_calloc(
; CHECK-NEXT: [[OBJ:%.*]] = call ptr @calloc(i64 1, i64 16)
; CHECK-NEXT: call void @escape(ptr [[OBJ]])
; CHECK-NEXT: ret i8 0
; MDEP-LABEL: @test_calloc(
; MDEP-NEXT: [[OBJ:%.*]] = call ptr @calloc(i64 1, i64 16)
; MDEP-NEXT: call void @escape(ptr [[OBJ]])
; MDEP-NEXT: ret i8 0
;
; MSSA-LABEL: @test_calloc(
; MSSA-NEXT: [[V1:%.*]] = load i8, ptr [[P:%.*]], align 1
; MSSA-NEXT: [[OBJ:%.*]] = call ptr @calloc(i64 1, i64 16)
; MSSA-NEXT: [[V2:%.*]] = load i8, ptr [[P]], align 1
; MSSA-NEXT: [[SUB:%.*]] = sub i8 [[V1]], [[V2]]
; MSSA-NEXT: call void @escape(ptr [[OBJ]])
; MSSA-NEXT: ret i8 [[SUB]]
;
%v1 = load i8, ptr %p
%obj = call ptr @calloc(i64 1, i64 16)
Expand All @@ -37,10 +54,18 @@ define i8 @test_calloc(ptr %p) {
}

define i8 @test_opnew(ptr %p) {
; CHECK-LABEL: @test_opnew(
; CHECK-NEXT: [[OBJ:%.*]] = call ptr @_Znwm(i64 16)
; CHECK-NEXT: call void @escape(ptr [[OBJ]])
; CHECK-NEXT: ret i8 0
; MDEP-LABEL: @test_opnew(
; MDEP-NEXT: [[OBJ:%.*]] = call ptr @_Znwm(i64 16)
; MDEP-NEXT: call void @escape(ptr [[OBJ]])
; MDEP-NEXT: ret i8 0
;
; MSSA-LABEL: @test_opnew(
; MSSA-NEXT: [[V1:%.*]] = load i8, ptr [[P:%.*]], align 1
; MSSA-NEXT: [[OBJ:%.*]] = call ptr @_Znwm(i64 16)
; MSSA-NEXT: [[V2:%.*]] = load i8, ptr [[P]], align 1
; MSSA-NEXT: [[SUB:%.*]] = sub i8 [[V1]], [[V2]]
; MSSA-NEXT: call void @escape(ptr [[OBJ]])
; MSSA-NEXT: ret i8 [[SUB]]
;
%v1 = load i8, ptr %p
%obj = call ptr @_Znwm(i64 16)
Expand All @@ -49,5 +74,5 @@ define i8 @test_opnew(ptr %p) {
call void @escape(ptr %obj)
ret i8 %sub
}


;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; CHECK: {{.*}}
30 changes: 22 additions & 8 deletions llvm/test/Transforms/GVN/pr14166.ll
Original file line number Diff line number Diff line change
@@ -1,21 +1,35 @@
; RUN: opt -disable-basic-aa -passes=gvn -S < %s | FileCheck %s
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -disable-basic-aa -passes=gvn -S < %s | FileCheck %s --check-prefixes=CHECK,MDEP
; RUN: opt -disable-basic-aa -passes='gvn<memoryssa;no-memdep>' -S < %s | FileCheck --check-prefixes=CHECK,MSSA %s
target datalayout = "e-p:32:32:32"
define <2 x i32> @test1() {
; MDEP-LABEL: define <2 x i32> @test1() {
; MDEP-NEXT: [[V1:%.*]] = alloca <2 x i32>, align 8
; MDEP-NEXT: call void @anything(ptr [[V1]])
; MDEP-NEXT: [[V2:%.*]] = load <2 x i32>, ptr [[V1]], align 8
; MDEP-NEXT: [[V3:%.*]] = inttoptr <2 x i32> [[V2]] to <2 x ptr>
; MDEP-NEXT: store <2 x ptr> [[V3]], ptr [[V1]], align 8
; MDEP-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[V2]] to i64
; MDEP-NEXT: ret <2 x i32> [[V2]]
;
; MSSA-LABEL: define <2 x i32> @test1() {
; MSSA-NEXT: [[V1:%.*]] = alloca <2 x i32>, align 8
; MSSA-NEXT: call void @anything(ptr [[V1]])
; MSSA-NEXT: [[V2:%.*]] = load <2 x i32>, ptr [[V1]], align 8
; MSSA-NEXT: [[V3:%.*]] = inttoptr <2 x i32> [[V2]] to <2 x ptr>
; MSSA-NEXT: store <2 x ptr> [[V3]], ptr [[V1]], align 8
; MSSA-NEXT: [[V5:%.*]] = load <2 x i32>, ptr [[V1]], align 8
; MSSA-NEXT: ret <2 x i32> [[V5]]
%v1 = alloca <2 x i32>
call void @anything(ptr %v1)
%v2 = load <2 x i32>, ptr %v1
%v3 = inttoptr <2 x i32> %v2 to <2 x ptr>
store <2 x ptr> %v3, ptr %v1
%v5 = load <2 x i32>, ptr %v1
ret <2 x i32> %v5
; CHECK-LABEL: @test1(
; CHECK: %v1 = alloca <2 x i32>
; CHECK: call void @anything(ptr %v1)
; CHECK: %v2 = load <2 x i32>, ptr %v1
; CHECK: %v3 = inttoptr <2 x i32> %v2 to <2 x ptr>
; CHECK: store <2 x ptr> %v3, ptr %v1
; CHECK: ret <2 x i32> %v2
}

declare void @anything(ptr)

;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; CHECK: {{.*}}