[llvm] 1ac72a0 - [IPConstProp] Regenerate check lines.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 30 01:53:08 PDT 2020
Author: Florian Hahn
Date: 2020-07-30T09:52:16+01:00
New Revision: 1ac72a0774b5e6d770bb65d2debccca561bc1c31
URL: https://github.com/llvm/llvm-project/commit/1ac72a0774b5e6d770bb65d2debccca561bc1c31
DIFF: https://github.com/llvm/llvm-project/commit/1ac72a0774b5e6d770bb65d2debccca561bc1c31.diff
LOG: [IPConstProp] Regenerate check lines.
Preparation for D84447.
Added:
Modified:
llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll
llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll
llvm/test/Transforms/IPConstantProp/comdat-ipo.ll
llvm/test/Transforms/IPConstantProp/deadarg.ll
llvm/test/Transforms/IPConstantProp/multiple_callbacks.ll
llvm/test/Transforms/IPConstantProp/naked-return.ll
llvm/test/Transforms/IPConstantProp/openmp_parallel_for.ll
llvm/test/Transforms/IPConstantProp/pthreads.ll
llvm/test/Transforms/IPConstantProp/recursion.ll
llvm/test/Transforms/IPConstantProp/return-argument.ll
llvm/test/Transforms/IPConstantProp/return-constant.ll
llvm/test/Transforms/IPConstantProp/return-constants.ll
llvm/test/Transforms/IPConstantProp/thread_local_acs.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll b/llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll
index 6471ed925797..270115cf5ddd 100644
--- a/llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll
+++ b/llvm/test/Transforms/IPConstantProp/2008-06-09-WeakProp.ll
@@ -1,17 +1,25 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -ipconstprop -S | FileCheck %s
; Should not propagate the result of a weak function.
; PR2411
-; CHECK: ret i32 %r
-
define weak i32 @foo() nounwind {
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i32 1
+;
entry:
- ret i32 1
+ ret i32 1
}
define i32 @main() nounwind {
+; CHECK-LABEL: @main(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[R:%.*]] = call i32 @foo() #0
+; CHECK-NEXT: ret i32 [[R]]
+;
entry:
- %r = call i32 @foo( ) nounwind
- ret i32 %r
+ %r = call i32 @foo( ) nounwind
+ ret i32 %r
}
diff --git a/llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll b/llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll
index 2a7d92d3f9b6..7afe858e52d1 100644
--- a/llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll
+++ b/llvm/test/Transforms/IPConstantProp/arg-count-mismatch.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -ipconstprop -S -o - | FileCheck %s
; The original C source looked like this:
@@ -50,22 +51,28 @@ define internal i16 @bar(i16 %p1, i16 %p2) {
; in argument count due to varargs (as long as all non-variadic arguments have
; been provided),
+define internal i16 @vararg_prop(i16 %p1, ...) {
+; CHECK-LABEL: @vararg_prop(
+; CHECK-NEXT: ret i16 7
+;
+ ret i16 %p1
+}
+
define dso_local i16 @vararg_tests(i16 %a) {
+; CHECK-LABEL: @vararg_tests(
+; CHECK-NEXT: [[CALL1:%.*]] = call i16 (i16, ...) @vararg_prop(i16 7, i16 8, i16 [[A:%.*]])
+; CHECK-NEXT: [[CALL2:%.*]] = call i16 bitcast (i16 (i16, i16, ...)* @vararg_no_prop to i16 (i16)*)(i16 7)
+; CHECK-NEXT: [[ADD:%.*]] = add i16 7, [[CALL2]]
+; CHECK-NEXT: ret i16 [[ADD]]
+;
%call1 = call i16 (i16, ...) @vararg_prop(i16 7, i16 8, i16 %a)
%call2 = call i16 bitcast (i16 (i16, i16, ...) * @vararg_no_prop to i16 (i16) *) (i16 7)
%add = add i16 %call1, %call2
ret i16 %add
}
-define internal i16 @vararg_prop(i16 %p1, ...) {
-; CHECK-LABEL: define internal i16 @vararg_prop(
-; CHECK-NEXT: ret i16 7
-;
- ret i16 %p1
-}
-
define internal i16 @vararg_no_prop(i16 %p1, i16 %p2, ...) {
-; CHECK-LABEL: define internal i16 @vararg_no_prop(
+; CHECK-LABEL: @vararg_no_prop(
; CHECK-NEXT: ret i16 [[P1:%.*]]
;
ret i16 %p1
diff --git a/llvm/test/Transforms/IPConstantProp/comdat-ipo.ll b/llvm/test/Transforms/IPConstantProp/comdat-ipo.ll
index 6c4c44c33e25..a19c89cb9bcf 100644
--- a/llvm/test/Transforms/IPConstantProp/comdat-ipo.ll
+++ b/llvm/test/Transforms/IPConstantProp/comdat-ipo.ll
@@ -1,8 +1,12 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -ipconstprop -S | FileCheck %s
; See PR26774
define i32 @baz() {
+; CHECK-LABEL: @baz(
+; CHECK-NEXT: ret i32 10
+;
ret i32 10
}
@@ -11,8 +15,9 @@ define i32 @baz() {
define linkonce_odr i32 @foo() {
; CHECK-LABEL: @foo(
-; CHECK-NEXT: %val = call i32 @baz()
-; CHECK-NEXT: ret i32 10
+; CHECK-NEXT: [[VAL:%.*]] = call i32 @baz()
+; CHECK-NEXT: ret i32 10
+;
%val = call i32 @baz()
ret i32 %val
@@ -20,8 +25,9 @@ define linkonce_odr i32 @foo() {
define i32 @bar() {
; CHECK-LABEL: @bar(
-; CHECK-NEXT: %val = call i32 @foo()
-; CHECK-NEXT: ret i32 %val
+; CHECK-NEXT: [[VAL:%.*]] = call i32 @foo()
+; CHECK-NEXT: ret i32 [[VAL]]
+;
%val = call i32 @foo()
ret i32 %val
diff --git a/llvm/test/Transforms/IPConstantProp/deadarg.ll b/llvm/test/Transforms/IPConstantProp/deadarg.ll
index 4b9938e09e90..25b9749b5079 100644
--- a/llvm/test/Transforms/IPConstantProp/deadarg.ll
+++ b/llvm/test/Transforms/IPConstantProp/deadarg.ll
@@ -1,6 +1,7 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -ipconstprop -disable-output
define internal void @foo(i32 %X) {
- call void @foo( i32 %X )
- ret void
+ call void @foo( i32 %X )
+ ret void
}
diff --git a/llvm/test/Transforms/IPConstantProp/multiple_callbacks.ll b/llvm/test/Transforms/IPConstantProp/multiple_callbacks.ll
index 6bc3f4477db0..6684044e24ce 100644
--- a/llvm/test/Transforms/IPConstantProp/multiple_callbacks.ll
+++ b/llvm/test/Transforms/IPConstantProp/multiple_callbacks.ll
@@ -1,9 +1,5 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -ipconstprop -S < %s | FileCheck %s
-; FIXME: There seems to be another instance of nondeterminism which causes the number of iterations to be either 1 or 3, depending on the system.
-; This needs to be investigated and resolved. In the meantime we do not verify the number of iterations.
-; opt -S -passes=attributor -aa-pipeline='basic-aa' -attributor-max-iterations-verify -attributor-max-iterations=1 < %s | FileCheck %s
-; RUN: opt -S -passes=attributor -aa-pipeline='basic-aa' -attributor-max-iterations-verify=false -attributor-max-iterations=3 < %s | FileCheck %s
-;
;
; /---------------------------------------|
; | /----------------------|----|
@@ -40,39 +36,63 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
define internal i32 @cb0(i32 %zero) {
+; CHECK-LABEL: @cb0(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i32 0
+;
entry:
-; CHECK: @cb0
-; CHECK-NEXT: entry
-; CHECK-NEXT: ret i32 0
ret i32 %zero
}
define internal i32 @cb1(i32 %unknown) {
+; CHECK-LABEL: @cb1(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i32 [[UNKNOWN:%.*]]
+;
entry:
-; CHECK: ret i32 %unknown
ret i32 %unknown
}
define internal i32 @cb2(i32 %unknown) {
+; CHECK-LABEL: @cb2(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[CALL:%.*]] = call i32 @cb0(i32 0)
+; CHECK-NEXT: ret i32 [[UNKNOWN:%.*]]
+;
entry:
%call = call i32 @cb0(i32 0)
-; CHECK: ret i32 %unknown
ret i32 %unknown
}
define internal i32 @cb3(i32 %unknown) {
+; CHECK-LABEL: @cb3(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i32 [[UNKNOWN:%.*]]
+;
entry:
-; CHECK: ret i32 %unknown
ret i32 %unknown
}
define internal i32 @cb4(i32 %unknown) {
+; CHECK-LABEL: @cb4(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i32 [[UNKNOWN:%.*]]
+;
entry:
-; CHECK: ret i32 %unknown
ret i32 %unknown
}
define void @foo() {
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[CALL:%.*]] = call i32 @cb0(i32 0)
+; CHECK-NEXT: [[CALL1:%.*]] = call i32 @cb3(i32 1)
+; CHECK-NEXT: call void @broker(i32 (i32)* nonnull @cb0, i32 (i32)* nonnull @cb1, i32 (i32)* nonnull @cb0, i32 0, i32 1)
+; CHECK-NEXT: call void @broker(i32 (i32)* nonnull @cb1, i32 (i32)* nonnull @cb2, i32 (i32)* nonnull @cb2, i32 0, i32 1)
+; CHECK-NEXT: call void @broker(i32 (i32)* nonnull @cb3, i32 (i32)* nonnull @cb2, i32 (i32)* nonnull @cb3, i32 0, i32 1)
+; CHECK-NEXT: call void @broker(i32 (i32)* nonnull @cb4, i32 (i32)* nonnull @cb4, i32 (i32)* nonnull @cb4, i32 0, i32 1)
+; CHECK-NEXT: ret void
+;
entry:
%call = call i32 @cb0(i32 0)
%call1 = call i32 @cb3(i32 1)
diff --git a/llvm/test/Transforms/IPConstantProp/naked-return.ll b/llvm/test/Transforms/IPConstantProp/naked-return.ll
index ac3dc062abf7..133662a211b4 100644
--- a/llvm/test/Transforms/IPConstantProp/naked-return.ll
+++ b/llvm/test/Transforms/IPConstantProp/naked-return.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -ipsccp -S %s | FileCheck %s
; RUN: opt -ipconstprop -S %s | FileCheck %s
@@ -5,22 +6,37 @@ target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i686-pc-windows-msvc19.0.24215"
define i32 @dipsy(i32, i32) local_unnamed_addr #0 {
+; CHECK-LABEL: @dipsy(
+; CHECK-NEXT: BasicBlock0:
+; CHECK-NEXT: call void asm "\0D\0Apushl %ebp\0D\0Amovl 8(%esp),%eax\0D\0Amovl 12(%esp), %ebp\0D\0Acalll *%eax\0D\0Apopl %ebp\0D\0Aretl\0D\0A", ""()
+; CHECK-NEXT: ret i32 0
+;
BasicBlock0:
call void asm "\0D\0Apushl %ebp\0D\0Amovl 8(%esp),%eax\0D\0Amovl 12(%esp), %ebp\0D\0Acalll *%eax\0D\0Apopl %ebp\0D\0Aretl\0D\0A", ""()
ret i32 0
}
define void @tinkywinky(i32, i32, i32) local_unnamed_addr #0 {
+; CHECK-LABEL: @tinkywinky(
+; CHECK-NEXT: BasicBlock1:
+; CHECK-NEXT: call void asm "\0D\0A movl 12(%esp), %ebp\0D\0A movl 4(%esp), %eax\0D\0A movl 8(%esp), %esp\0D\0A jmpl *%eax\0D\0A", ""()
+; CHECK-NEXT: ret void
+;
BasicBlock1:
call void asm "\0D\0A movl 12(%esp), %ebp\0D\0A movl 4(%esp), %eax\0D\0A movl 8(%esp), %esp\0D\0A jmpl *%eax\0D\0A", ""()
ret void
}
define void @patatino(i32, i32, i32) local_unnamed_addr #1 {
+; CHECK-LABEL: @patatino(
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP3:%.*]] = tail call i32 @dipsy(i32 [[TMP0:%.*]], i32 [[TMP1:%.*]]) #0
+; CHECK-NEXT: tail call void @tinkywinky(i32 [[TMP3]], i32 [[TMP2:%.*]], i32 [[TMP1]]) #0
+; CHECK-NEXT: ret void
+;
bb:
%3 = tail call i32 @dipsy(i32 %0, i32 %1) #0
; Check that we don't accidentally propagate zero.
-; CHECK: @tinkywinky(i32 %3, i32 %2, i32 %1) #0
tail call void @tinkywinky(i32 %3, i32 %2, i32 %1) #0
ret void
}
diff --git a/llvm/test/Transforms/IPConstantProp/openmp_parallel_for.ll b/llvm/test/Transforms/IPConstantProp/openmp_parallel_for.ll
index 3c7ffe27f5d2..338cc8886e29 100644
--- a/llvm/test/Transforms/IPConstantProp/openmp_parallel_for.ll
+++ b/llvm/test/Transforms/IPConstantProp/openmp_parallel_for.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -ipconstprop < %s | FileCheck %s
;
; void bar(int, float, double);
@@ -24,6 +25,16 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
@1 = private unnamed_addr global %struct.ident_t { i32 0, i32 2, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i32 0, i32 0) }, align 8
define dso_local void @foo(i32 %N) {
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4
+; CHECK-NEXT: [[P:%.*]] = alloca float, align 4
+; CHECK-NEXT: store i32 [[N:%.*]], i32* [[N_ADDR]], align 4
+; CHECK-NEXT: store float 3.000000e+00, float* [[P]], align 4
+; CHECK-NEXT: store i32 7, i32* [[N_ADDR]], align 4
+; CHECK-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* nonnull @1, i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, float*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* nonnull [[N_ADDR]], float* nonnull [[P]], i64 4617315517961601024)
+; CHECK-NEXT: ret void
+;
entry:
%N.addr = alloca i32, align 4
%p = alloca float, align 4
@@ -35,13 +46,72 @@ entry:
}
define internal void @.omp_outlined.(i32* noalias %.global_tid., i32* noalias %.bound_tid., i32* dereferenceable(4) %N, float* dereferenceable(4) %p, i64 %q) {
+; CHECK-LABEL: @.omp_outlined.(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[Q_ADDR:%.*]] = alloca i64, align 8
+; CHECK-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4
+; CHECK-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4
+; CHECK-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4
+; CHECK-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
+; CHECK-NEXT: store i64 4617315517961601024, i64* [[Q_ADDR]], align 8
+; CHECK-NEXT: [[CONV:%.*]] = bitcast i64* [[Q_ADDR]] to double*
+; CHECK-NEXT: [[TMP:%.*]] = load i32, i32* [[N:%.*]], align 4
+; CHECK-NEXT: [[SUB3:%.*]] = add nsw i32 [[TMP]], -3
+; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP]], 2
+; CHECK-NEXT: br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]
+; CHECK: omp.precond.then:
+; CHECK-NEXT: store i32 0, i32* [[DOTOMP_LB]], align 4
+; CHECK-NEXT: store i32 [[SUB3]], i32* [[DOTOMP_UB]], align 4
+; CHECK-NEXT: store i32 1, i32* [[DOTOMP_STRIDE]], align 4
+; CHECK-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4
+; CHECK-NEXT: [[TMP5:%.*]] = load i32, i32* [[DOTGLOBAL_TID_:%.*]], align 4
+; CHECK-NEXT: call void @__kmpc_for_static_init_4(%struct.ident_t* nonnull @0, i32 [[TMP5]], i32 34, i32* nonnull [[DOTOMP_IS_LAST]], i32* nonnull [[DOTOMP_LB]], i32* nonnull [[DOTOMP_UB]], i32* nonnull [[DOTOMP_STRIDE]], i32 1, i32 1)
+; CHECK-NEXT: [[TMP6:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; CHECK-NEXT: [[CMP6:%.*]] = icmp sgt i32 [[TMP6]], [[SUB3]]
+; CHECK-NEXT: br i1 [[CMP6]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
+; CHECK: cond.true:
+; CHECK-NEXT: br label [[COND_END:%.*]]
+; CHECK: cond.false:
+; CHECK-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; CHECK-NEXT: br label [[COND_END]]
+; CHECK: cond.end:
+; CHECK-NEXT: [[COND:%.*]] = phi i32 [ [[SUB3]], [[COND_TRUE]] ], [ [[TMP7]], [[COND_FALSE]] ]
+; CHECK-NEXT: store i32 [[COND]], i32* [[DOTOMP_UB]], align 4
+; CHECK-NEXT: [[TMP8:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4
+; CHECK-NEXT: br label [[OMP_INNER_FOR_COND:%.*]]
+; CHECK: omp.inner.for.cond:
+; CHECK-NEXT: [[DOTOMP_IV_0:%.*]] = phi i32 [ [[TMP8]], [[COND_END]] ], [ [[ADD11:%.*]], [[OMP_INNER_FOR_INC:%.*]] ]
+; CHECK-NEXT: [[TMP9:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4
+; CHECK-NEXT: [[CMP8:%.*]] = icmp sgt i32 [[DOTOMP_IV_0]], [[TMP9]]
+; CHECK-NEXT: br i1 [[CMP8]], label [[OMP_INNER_FOR_COND_CLEANUP:%.*]], label [[OMP_INNER_FOR_BODY:%.*]]
+; CHECK: omp.inner.for.cond.cleanup:
+; CHECK-NEXT: br label [[OMP_INNER_FOR_END:%.*]]
+; CHECK: omp.inner.for.body:
+; CHECK-NEXT: [[ADD10:%.*]] = add nsw i32 [[DOTOMP_IV_0]], 2
+; CHECK-NEXT: [[TMP10:%.*]] = load float, float* [[P:%.*]], align 4
+; CHECK-NEXT: [[TMP11:%.*]] = load double, double* [[CONV]], align 8
+; CHECK-NEXT: call void @bar(i32 [[ADD10]], float [[TMP10]], double [[TMP11]])
+; CHECK-NEXT: br label [[OMP_BODY_CONTINUE:%.*]]
+; CHECK: omp.body.continue:
+; CHECK-NEXT: br label [[OMP_INNER_FOR_INC]]
+; CHECK: omp.inner.for.inc:
+; CHECK-NEXT: [[ADD11]] = add nsw i32 [[DOTOMP_IV_0]], 1
+; CHECK-NEXT: br label [[OMP_INNER_FOR_COND]]
+; CHECK: omp.inner.for.end:
+; CHECK-NEXT: br label [[OMP_LOOP_EXIT:%.*]]
+; CHECK: omp.loop.exit:
+; CHECK-NEXT: [[TMP12:%.*]] = load i32, i32* [[DOTGLOBAL_TID_]], align 4
+; CHECK-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* nonnull @0, i32 [[TMP12]])
+; CHECK-NEXT: br label [[OMP_PRECOND_END]]
+; CHECK: omp.precond.end:
+; CHECK-NEXT: ret void
+;
entry:
%q.addr = alloca i64, align 8
%.omp.lb = alloca i32, align 4
%.omp.ub = alloca i32, align 4
%.omp.stride = alloca i32, align 4
%.omp.is_last = alloca i32, align 4
-; CHECK: store i64 4617315517961601024, i64* %q.addr, align 8
store i64 %q, i64* %q.addr, align 8
%conv = bitcast i64* %q.addr to double*
%tmp = load i32, i32* %N, align 4
diff --git a/llvm/test/Transforms/IPConstantProp/pthreads.ll b/llvm/test/Transforms/IPConstantProp/pthreads.ll
index 0af2c166a088..dcad3858da13 100644
--- a/llvm/test/Transforms/IPConstantProp/pthreads.ll
+++ b/llvm/test/Transforms/IPConstantProp/pthreads.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -ipconstprop -S < %s | FileCheck %s
;
; #include <pthread.h>
@@ -24,6 +25,13 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
@GlobalVPtr = common dso_local global i8* null, align 8
define dso_local i32 @main() {
+; CHECK-LABEL: @main(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[THREAD:%.*]] = alloca i64, align 8
+; CHECK-NEXT: [[CALL:%.*]] = call i32 @pthread_create(i64* nonnull [[THREAD]], %union.pthread_attr_t* null, i8* (i8*)* nonnull @foo, i8* null)
+; CHECK-NEXT: [[CALL1:%.*]] = call i32 @pthread_create(i64* nonnull [[THREAD]], %union.pthread_attr_t* null, i8* (i8*)* nonnull @bar, i8* bitcast (i8** @GlobalVPtr to i8*))
+; CHECK-NEXT: ret i32 0
+;
entry:
%thread = alloca i64, align 8
%call = call i32 @pthread_create(i64* nonnull %thread, %union.pthread_attr_t* null, i8* (i8*)* nonnull @foo, i8* null)
@@ -34,14 +42,20 @@ entry:
declare !callback !0 dso_local i32 @pthread_create(i64*, %union.pthread_attr_t*, i8* (i8*)*, i8*)
define internal i8* @foo(i8* %arg) {
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i8* null
+;
entry:
-; CHECK: ret i8* null
ret i8* %arg
}
define internal i8* @bar(i8* %arg) {
+; CHECK-LABEL: @bar(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: ret i8* bitcast (i8** @GlobalVPtr to i8*)
+;
entry:
-; CHECK: ret i8* bitcast (i8** @GlobalVPtr to i8*)
ret i8* %arg
}
diff --git a/llvm/test/Transforms/IPConstantProp/recursion.ll b/llvm/test/Transforms/IPConstantProp/recursion.ll
index 13aea8fc7b4a..ac8ff9ca00e3 100644
--- a/llvm/test/Transforms/IPConstantProp/recursion.ll
+++ b/llvm/test/Transforms/IPConstantProp/recursion.ll
@@ -1,15 +1,25 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -ipconstprop -deadargelim -S | FileCheck %s
; CHECK-NOT: %X
define internal i32 @foo(i32 %X) {
- %Y = call i32 @foo( i32 %X ) ; <i32> [#uses=1]
- %Z = add i32 %Y, 1 ; <i32> [#uses=1]
- ret i32 %Z
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: [[Y:%.*]] = call i32 @foo()
+; CHECK-NEXT: [[Z:%.*]] = add i32 [[Y]], 1
+; CHECK-NEXT: ret i32 [[Z]]
+;
+ %Y = call i32 @foo( i32 %X ) ; <i32> [#uses=1]
+ %Z = add i32 %Y, 1 ; <i32> [#uses=1]
+ ret i32 %Z
}
define void @bar() {
- call i32 @foo( i32 17 ) ; <i32>:1 [#uses=0]
- ret void
+; CHECK-LABEL: @bar(
+; CHECK-NEXT: [[TMP1:%.*]] = call i32 @foo()
+; CHECK-NEXT: ret void
+;
+ call i32 @foo( i32 17 ) ; <i32>:1 [#uses=0]
+ ret void
}
diff --git a/llvm/test/Transforms/IPConstantProp/return-argument.ll b/llvm/test/Transforms/IPConstantProp/return-argument.ll
index 830a6547b632..6a3eac0c120d 100644
--- a/llvm/test/Transforms/IPConstantProp/return-argument.ll
+++ b/llvm/test/Transforms/IPConstantProp/return-argument.ll
@@ -1,58 +1,91 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -ipconstprop -S | FileCheck %s
-; CHECK: add i32 1, 3
-; CHECK: store i32 %Z, i32* %Q
-
;; This function returns its second argument on all return statements
define internal i32* @incdec(i1 %C, i32* %V) {
- %X = load i32, i32* %V
- br i1 %C, label %T, label %F
+; CHECK-LABEL: @incdec(
+; CHECK-NEXT: [[X:%.*]] = load i32, i32* [[V:%.*]], align 4
+; CHECK-NEXT: br i1 [[C:%.*]], label [[T:%.*]], label [[F:%.*]]
+; CHECK: T:
+; CHECK-NEXT: [[X1:%.*]] = add i32 [[X]], 1
+; CHECK-NEXT: store i32 [[X1]], i32* [[V]], align 4
+; CHECK-NEXT: ret i32* [[V]]
+; CHECK: F:
+; CHECK-NEXT: [[X2:%.*]] = sub i32 [[X]], 1
+; CHECK-NEXT: store i32 [[X2]], i32* [[V]], align 4
+; CHECK-NEXT: ret i32* [[V]]
+;
+ %X = load i32, i32* %V
+ br i1 %C, label %T, label %F
T: ; preds = %0
- %X1 = add i32 %X, 1
- store i32 %X1, i32* %V
- ret i32* %V
+ %X1 = add i32 %X, 1
+ store i32 %X1, i32* %V
+ ret i32* %V
F: ; preds = %0
- %X2 = sub i32 %X, 1
- store i32 %X2, i32* %V
- ret i32* %V
+ %X2 = sub i32 %X, 1
+ store i32 %X2, i32* %V
+ ret i32* %V
}
;; This function returns its first argument as a part of a multiple return
;; value
define internal { i32, i32 } @foo(i32 %A, i32 %B) {
- %X = add i32 %A, %B
- %Y = insertvalue { i32, i32 } undef, i32 %A, 0
- %Z = insertvalue { i32, i32 } %Y, i32 %X, 1
- ret { i32, i32 } %Z
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: [[X:%.*]] = add i32 [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT: [[Y:%.*]] = insertvalue { i32, i32 } undef, i32 [[A]], 0
+; CHECK-NEXT: [[Z:%.*]] = insertvalue { i32, i32 } [[Y]], i32 [[X]], 1
+; CHECK-NEXT: ret { i32, i32 } [[Z]]
+;
+ %X = add i32 %A, %B
+ %Y = insertvalue { i32, i32 } undef, i32 %A, 0
+ %Z = insertvalue { i32, i32 } %Y, i32 %X, 1
+ ret { i32, i32 } %Z
}
define void @caller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
- %Q = alloca i32
- ;; Call incdec to see if %W is properly replaced by %Q
- %W = call i32* @incdec(i1 %C, i32* %Q ) ; <i32> [#uses=1]
- ;; Call @foo twice, to prevent the arguments from propagating into the
- ;; function (so we can check the returned argument is properly
- ;; propagated per-caller).
- %S1 = call { i32, i32 } @foo(i32 1, i32 2)
- %X1 = extractvalue { i32, i32 } %S1, 0
- %S2 = invoke { i32, i32 } @foo(i32 3, i32 4) to label %OK unwind label %LPAD
+; CHECK-LABEL: @caller(
+; CHECK-NEXT: [[Q:%.*]] = alloca i32, align 4
+; CHECK-NEXT: [[W:%.*]] = call i32* @incdec(i1 [[C:%.*]], i32* [[Q]])
+; CHECK-NEXT: [[S1:%.*]] = call { i32, i32 } @foo(i32 1, i32 2)
+; CHECK-NEXT: [[S2:%.*]] = invoke { i32, i32 } @foo(i32 3, i32 4)
+; CHECK-NEXT: to label [[OK:%.*]] unwind label [[LPAD:%.*]]
+; CHECK: OK:
+; CHECK-NEXT: [[Z:%.*]] = add i32 1, 3
+; CHECK-NEXT: store i32 [[Z]], i32* [[Q]], align 4
+; CHECK-NEXT: br label [[RET:%.*]]
+; CHECK: LPAD:
+; CHECK-NEXT: [[EXN:%.*]] = landingpad { i8*, i32 }
+; CHECK-NEXT: cleanup
+; CHECK-NEXT: br label [[RET]]
+; CHECK: RET:
+; CHECK-NEXT: ret void
+;
+ %Q = alloca i32
+ ;; Call incdec to see if %W is properly replaced by %Q
+ %W = call i32* @incdec(i1 %C, i32* %Q ) ; <i32> [#uses=1]
+ ;; Call @foo twice, to prevent the arguments from propagating into the
+ ;; function (so we can check the returned argument is properly
+ ;; propagated per-caller).
+ %S1 = call { i32, i32 } @foo(i32 1, i32 2)
+ %X1 = extractvalue { i32, i32 } %S1, 0
+ %S2 = invoke { i32, i32 } @foo(i32 3, i32 4) to label %OK unwind label %LPAD
OK:
- %X2 = extractvalue { i32, i32 } %S2, 0
- ;; Do some stuff with the returned values which we can grep for
- %Z = add i32 %X1, %X2
- store i32 %Z, i32* %W
- br label %RET
+ %X2 = extractvalue { i32, i32 } %S2, 0
+ ;; Do some stuff with the returned values which we can grep for
+ %Z = add i32 %X1, %X2
+ store i32 %Z, i32* %W
+ br label %RET
LPAD:
- %exn = landingpad {i8*, i32}
- cleanup
- br label %RET
+ %exn = landingpad {i8*, i32}
+ cleanup
+ br label %RET
RET:
- ret void
+ ret void
}
declare i32 @__gxx_personality_v0(...)
diff --git a/llvm/test/Transforms/IPConstantProp/return-constant.ll b/llvm/test/Transforms/IPConstantProp/return-constant.ll
index 155a3011dd66..d75aa9b96931 100644
--- a/llvm/test/Transforms/IPConstantProp/return-constant.ll
+++ b/llvm/test/Transforms/IPConstantProp/return-constant.ll
@@ -1,34 +1,52 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -ipconstprop -instcombine -S | FileCheck %s
-; CHECK: ret i1 true
-; CHECK: ret i1 true
-; CHECK-NOT: ret i1 true
-
define internal i32 @foo(i1 %C) {
- br i1 %C, label %T, label %F
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: br i1 [[C:%.*]], label [[T:%.*]], label [[F:%.*]]
+; CHECK: T:
+; CHECK-NEXT: ret i32 52
+; CHECK: F:
+; CHECK-NEXT: ret i32 52
+;
+ br i1 %C, label %T, label %F
T: ; preds = %0
- ret i32 52
+ ret i32 52
F: ; preds = %0
- ret i32 52
+ ret i32 52
}
define i1 @caller(i1 %C) {
- %X = call i32 @foo( i1 %C ) ; <i32> [#uses=1]
- %Y = icmp ne i32 %X, 0 ; <i1> [#uses=1]
- ret i1 %Y
+; CHECK-LABEL: @caller(
+; CHECK-NEXT: [[X:%.*]] = call i32 @foo(i1 [[C:%.*]])
+; CHECK-NEXT: ret i1 true
+;
+ %X = call i32 @foo( i1 %C ) ; <i32> [#uses=1]
+ %Y = icmp ne i32 %X, 0 ; <i1> [#uses=1]
+ ret i1 %Y
}
define i1 @invokecaller(i1 %C) personality i32 (...)* @__gxx_personality_v0 {
- %X = invoke i32 @foo( i1 %C ) to label %OK unwind label %FAIL ; <i32> [#uses=1]
+; CHECK-LABEL: @invokecaller(
+; CHECK-NEXT: [[X:%.*]] = invoke i32 @foo(i1 [[C:%.*]])
+; CHECK-NEXT: to label [[OK:%.*]] unwind label [[FAIL:%.*]]
+; CHECK: OK:
+; CHECK-NEXT: ret i1 true
+; CHECK: FAIL:
+; CHECK-NEXT: [[EXN:%.*]] = landingpad { i8*, i32 }
+; CHECK-NEXT: cleanup
+; CHECK-NEXT: ret i1 false
+;
+ %X = invoke i32 @foo( i1 %C ) to label %OK unwind label %FAIL ; <i32> [#uses=1]
OK:
- %Y = icmp ne i32 %X, 0 ; <i1> [#uses=1]
- ret i1 %Y
+ %Y = icmp ne i32 %X, 0 ; <i1> [#uses=1]
+ ret i1 %Y
FAIL:
- %exn = landingpad {i8*, i32}
- cleanup
- ret i1 false
+ %exn = landingpad {i8*, i32}
+ cleanup
+ ret i1 false
}
declare i32 @__gxx_personality_v0(...)
diff --git a/llvm/test/Transforms/IPConstantProp/return-constants.ll b/llvm/test/Transforms/IPConstantProp/return-constants.ll
index 40b97ad04a9d..461106731614 100644
--- a/llvm/test/Transforms/IPConstantProp/return-constants.ll
+++ b/llvm/test/Transforms/IPConstantProp/return-constants.ll
@@ -1,13 +1,20 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -ipconstprop -S | FileCheck %s
-;; Check that the 21 constants got propagated properly
-; CHECK: %M = add i32 21, 21
-;; Check that the second return values didn't get propagated
-; CHECK: %N = add i32 %B, %D
-
%0 = type { i32, i32 }
define internal %0 @foo(i1 %Q) {
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: br i1 [[Q:%.*]], label [[T:%.*]], label [[F:%.*]]
+; CHECK: T:
+; CHECK-NEXT: [[MRV:%.*]] = insertvalue [[TMP0:%.*]] undef, i32 21, 0
+; CHECK-NEXT: [[MRV1:%.*]] = insertvalue [[TMP0]] %mrv, i32 22, 1
+; CHECK-NEXT: ret [[TMP0]] %mrv1
+; CHECK: F:
+; CHECK-NEXT: [[MRV2:%.*]] = insertvalue [[TMP0]] undef, i32 21, 0
+; CHECK-NEXT: [[MRV3:%.*]] = insertvalue [[TMP0]] %mrv2, i32 23, 1
+; CHECK-NEXT: ret [[TMP0]] %mrv3
+;
br i1 %Q, label %T, label %F
T: ; preds = %0
@@ -22,6 +29,16 @@ F: ; preds = %0
}
define internal %0 @bar(i1 %Q) {
+; CHECK-LABEL: @bar(
+; CHECK-NEXT: [[A:%.*]] = insertvalue [[TMP0:%.*]] undef, i32 21, 0
+; CHECK-NEXT: br i1 [[Q:%.*]], label [[T:%.*]], label [[F:%.*]]
+; CHECK: T:
+; CHECK-NEXT: [[B:%.*]] = insertvalue [[TMP0]] %A, i32 22, 1
+; CHECK-NEXT: ret [[TMP0]] %B
+; CHECK: F:
+; CHECK-NEXT: [[C:%.*]] = insertvalue [[TMP0]] %A, i32 23, 1
+; CHECK-NEXT: ret [[TMP0]] %C
+;
%A = insertvalue %0 undef, i32 21, 0
br i1 %Q, label %T, label %F
@@ -35,6 +52,15 @@ F: ; preds = %0
}
define %0 @caller(i1 %Q) {
+; CHECK-LABEL: @caller(
+; CHECK-NEXT: [[X:%.*]] = call [[TMP0:%.*]] @foo(i1 [[Q:%.*]])
+; CHECK-NEXT: [[B:%.*]] = extractvalue [[TMP0]] %X, 1
+; CHECK-NEXT: [[Y:%.*]] = call [[TMP0]] @bar(i1 [[Q]])
+; CHECK-NEXT: [[D:%.*]] = extractvalue [[TMP0]] %Y, 1
+; CHECK-NEXT: [[M:%.*]] = add i32 21, 21
+; CHECK-NEXT: [[N:%.*]] = add i32 [[B]], [[D]]
+; CHECK-NEXT: ret [[TMP0]] %X
+;
%X = call %0 @foo(i1 %Q)
%A = extractvalue %0 %X, 0
%B = extractvalue %0 %X, 1
diff --git a/llvm/test/Transforms/IPConstantProp/thread_local_acs.ll b/llvm/test/Transforms/IPConstantProp/thread_local_acs.ll
index 0595a5ca7f13..3f843d26077a 100644
--- a/llvm/test/Transforms/IPConstantProp/thread_local_acs.ll
+++ b/llvm/test/Transforms/IPConstantProp/thread_local_acs.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -ipconstprop -S < %s | FileCheck %s
;
; #include <threads.h>
@@ -20,10 +21,14 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
@gsh = dso_local global i32 0, align 4
define internal i32 @callee(i32* %thread_local_ptr, i32* %shared_ptr) {
+; CHECK-LABEL: @callee(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP:%.*]] = load i32, i32* [[THREAD_LOCAL_PTR:%.*]], align 4
+; CHECK-NEXT: [[TMP1:%.*]] = load i32, i32* @gsh, align 4
+; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP]], [[TMP1]]
+; CHECK-NEXT: ret i32 [[ADD]]
+;
entry:
-; CHECK: %tmp = load i32, i32* %thread_local_ptr, align 4
-; CHECK: %tmp1 = load i32, i32* @gsh, align 4
-; CHECK: %add = add nsw i32 %tmp, %tmp1
%tmp = load i32, i32* %thread_local_ptr, align 4
%tmp1 = load i32, i32* %shared_ptr, align 4
%add = add nsw i32 %tmp, %tmp1
@@ -31,6 +36,11 @@ entry:
}
define dso_local void @caller() {
+; CHECK-LABEL: @caller(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: call void @broker(i32* nonnull @gtl, i32 (i32*, i32*)* nonnull @callee, i32* nonnull @gsh)
+; CHECK-NEXT: ret void
+;
entry:
call void @broker(i32* nonnull @gtl, i32 (i32*, i32*)* nonnull @callee, i32* nonnull @gsh)
ret void
More information about the llvm-commits
mailing list