mirror of
https://git.proxmox.com/git/llvm-toolchain
synced 2025-06-12 11:06:17 +00:00

* Backport some patches (originally from rust, and upstreamed) to fix two failing tests in rustc.
53 lines
2.0 KiB
Diff
53 lines
2.0 KiB
Diff
commit 156cc49e505986a1659adaa3a0b5a070372377c8
|
|
Author: Chandler Carruth <chandlerc@gmail.com>
|
|
Date: Tue Jun 27 03:08:45 2017 +0000
|
|
|
|
[SROA] Further test cleanup and add a test for the actual propagation of
|
|
the nonnull attribute distinct from rewriting it into an assume.
|
|
|
|
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306358 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
|
|
--- a/test/Transforms/SROA/preserve-nonnull.ll
|
|
+++ b/test/Transforms/SROA/preserve-nonnull.ll
|
|
@@ -3,8 +3,31 @@
|
|
; Make sure that SROA doesn't lose nonnull metadata
|
|
; on loads from allocas that get optimized out.
|
|
|
|
-define float* @yummy_nonnull(float** %arg) {
|
|
-; CHECK-LABEL: define float* @yummy_nonnull(
|
|
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1)
|
|
+
|
|
+; Check that we do basic propagation of nonnull when rewriting.
|
|
+define i8* @propagate_nonnull(i32* %v) {
|
|
+; CHECK-LABEL: define i8* @propagate_nonnull(
|
|
+; CHECK-NEXT: entry:
|
|
+; CHECK-NEXT: %[[A:.*]] = alloca i8*
|
|
+; CHECK-NEXT: %[[V_CAST:.*]] = bitcast i32* %v to i8*
|
|
+; CHECK-NEXT: store i8* %[[V_CAST]], i8** %[[A]]
|
|
+; CHECK-NEXT: %[[LOAD:.*]] = load volatile i8*, i8** %[[A]], !nonnull !0
|
|
+; CHECK-NEXT: ret i8* %[[LOAD]]
|
|
+entry:
|
|
+ %a = alloca [2 x i8*]
|
|
+ %a.gep0 = getelementptr [2 x i8*], [2 x i8*]* %a, i32 0, i32 0
|
|
+ %a.gep1 = getelementptr [2 x i8*], [2 x i8*]* %a, i32 0, i32 1
|
|
+ %a.gep0.cast = bitcast i8** %a.gep0 to i32**
|
|
+ %a.gep1.cast = bitcast i8** %a.gep1 to i32**
|
|
+ store i32* %v, i32** %a.gep1.cast
|
|
+ store i32* null, i32** %a.gep0.cast
|
|
+ %load = load volatile i8*, i8** %a.gep1, !nonnull !0
|
|
+ ret i8* %load
|
|
+}
|
|
+
|
|
+define float* @turn_nonnull_into_assume(float** %arg) {
|
|
+; CHECK-LABEL: define float* @turn_nonnull_into_assume(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: %[[RETURN:.*]] = load float*, float** %arg, align 8
|
|
; CHECK-NEXT: %[[ASSUME:.*]] = icmp ne float* %[[RETURN]], null
|
|
@@ -19,6 +42,4 @@
|
|
ret float* %ret
|
|
}
|
|
|
|
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1)
|
|
-
|
|
!0 = !{}
|