Skip to content

Commit d897512

Browse files
authored
[ValueTracking] Return poison for zero-sized types (#122647)
Return `poison` for zero-sized types in `isBitwiseValue`.
1 parent 8fb29ba commit d897512

File tree

3 files changed

+8
-8
lines changed

3 files changed

+8
-8
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6192,9 +6192,9 @@ Value *llvm::isBytewiseValue(Value *V, const DataLayout &DL) {
61926192
if (isa<UndefValue>(V))
61936193
return UndefInt8;
61946194

6195-
// Return Undef for zero-sized type.
6195+
// Return poison for zero-sized type.
61966196
if (DL.getTypeStoreSize(V->getType()).isZero())
6197-
return UndefInt8;
6197+
return PoisonValue::get(Type::getInt8Ty(Ctx));
61986198

61996199
Constant *C = dyn_cast<Constant>(V);
62006200
if (!C) {

llvm/test/Transforms/MemCpyOpt/store-to-memset-is-nonzero-type.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
define void @array_zero(ptr %p) {
77
; CHECK-LABEL: @array_zero(
8-
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[P:%.*]], i8 undef, i64 0, i1 false)
8+
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[P:%.*]], i8 poison, i64 0, i1 false)
99
; CHECK-NEXT: ret void
1010
;
1111
store [0 x i8] zeroinitializer, ptr %p
@@ -25,7 +25,7 @@ define void @array_nonzero(ptr %p) {
2525

2626
define void @struct_zero(ptr %p) {
2727
; CHECK-LABEL: @struct_zero(
28-
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[P:%.*]], i8 undef, i64 0, i1 false)
28+
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 1 [[P:%.*]], i8 poison, i64 0, i1 false)
2929
; CHECK-NEXT: ret void
3030
;
3131
store { } zeroinitializer, ptr %p

llvm/unittests/Analysis/ValueTrackingTest.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,15 +2869,15 @@ const std::pair<const char *, const char *> IsBytewiseValueTests[] = {
28692869
"ptr inttoptr (i96 -1 to ptr)",
28702870
},
28712871
{
2872-
"i8 undef",
2872+
"i8 poison",
28732873
"[0 x i8] zeroinitializer",
28742874
},
28752875
{
28762876
"i8 undef",
28772877
"[0 x i8] undef",
28782878
},
28792879
{
2880-
"i8 undef",
2880+
"i8 poison",
28812881
"[5 x [0 x i8]] zeroinitializer",
28822882
},
28832883
{
@@ -2959,15 +2959,15 @@ const std::pair<const char *, const char *> IsBytewiseValueTests[] = {
29592959
"[2 x i16] [i16 -21836, i16 -21846]]",
29602960
},
29612961
{
2962-
"i8 undef",
2962+
"i8 poison",
29632963
"{ } zeroinitializer",
29642964
},
29652965
{
29662966
"i8 undef",
29672967
"{ } undef",
29682968
},
29692969
{
2970-
"i8 undef",
2970+
"i8 poison",
29712971
"{ {}, {} } zeroinitializer",
29722972
},
29732973
{

0 commit comments

Comments
 (0)