From 2ef03bc3a83f67a98d82a03a0c0f7ac9caf2426f Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 8 Mar 2021 17:04:28 +0100 Subject: [PATCH] [ConstProp] Add more tests for pointer icmp folding (NFC) --- .../Transforms/InstSimplify/ConstProp/icmp-null.ll | 153 +++++++++++++++++++++ 1 file changed, 153 insertions(+) diff --git a/llvm/test/Transforms/InstSimplify/ConstProp/icmp-null.ll b/llvm/test/Transforms/InstSimplify/ConstProp/icmp-null.ll index c1bef60..46fd8c4b 100644 --- a/llvm/test/Transforms/InstSimplify/ConstProp/icmp-null.ll +++ b/llvm/test/Transforms/InstSimplify/ConstProp/icmp-null.ll @@ -62,3 +62,156 @@ define i1 @ult_constexpr_constexpr_one(i8* %x) { %cmp = icmp ult i8 (...)* bitcast (i1 (i8*)* @ugt_null_constexpr to i8 (...)*), inttoptr (i32 1 to i8 (...)*) ret i1 %cmp } + +@g = global [2 x i32] [i32 1, i32 2] +@g2 = global i32 0 + +define i1 @global_ne_null() { +; CHECK-LABEL: @global_ne_null( +; CHECK-NEXT: ret i1 true +; + %cmp = icmp ne [2 x i32]* @g, null + ret i1 %cmp +} + +define i1 @global_ugt_null() { +; CHECK-LABEL: @global_ugt_null( +; CHECK-NEXT: ret i1 icmp ugt ([2 x i32]* @g, [2 x i32]* null) +; + %cmp = icmp ugt [2 x i32]* @g, null + ret i1 %cmp +} + +define i1 @global_sgt_null() { +; CHECK-LABEL: @global_sgt_null( +; CHECK-NEXT: ret i1 icmp sgt ([2 x i32]* @g, [2 x i32]* null) +; + %cmp = icmp sgt [2 x i32]* @g, null + ret i1 %cmp +} + +define i1 @global_gep_ne_null() { +; CHECK-LABEL: @global_gep_ne_null( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr inbounds [2 x i32], [2 x i32]* @g, i64 1 + %cmp = icmp ne [2 x i32]* %gep, null + ret i1 %cmp +} + +define i1 @global_gep_ugt_null() { +; CHECK-LABEL: @global_gep_ugt_null( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr inbounds [2 x i32], [2 x i32]* @g, i64 1 + %cmp = icmp ugt [2 x i32]* %gep, null + ret i1 %cmp +} + +define i1 @global_gep_sgt_null() { +; CHECK-LABEL: @global_gep_sgt_null( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr inbounds [2 x i32], [2 x i32]* @g, i64 1 + %cmp = icmp sgt [2 x i32]* %gep, null + ret i1 %cmp +} + +define i1 @null_gep_ne_null() { +; CHECK-LABEL: @null_gep_ne_null( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr i8, i8* null, i64 ptrtoint (i32* @g2 to i64) + %cmp = icmp ne i8* %gep, null + ret i1 %cmp +} + +define i1 @null_gep_ugt_null() { +; CHECK-LABEL: @null_gep_ugt_null( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr i8, i8* null, i64 ptrtoint (i32* @g2 to i64) + %cmp = icmp ugt i8* %gep, null + ret i1 %cmp +} + +define i1 @null_gep_sgt_null() { +; CHECK-LABEL: @null_gep_sgt_null( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr i8, i8* null, i64 ptrtoint (i32* @g2 to i64) + %cmp = icmp sgt i8* %gep, null + ret i1 %cmp +} + +define i1 @null_gep_ne_global() { +; CHECK-LABEL: @null_gep_ne_global( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr [2 x i32], [2 x i32]* null, i64 ptrtoint (i32* @g2 to i64) + %cmp = icmp ne [2 x i32]* %gep, @g + ret i1 %cmp +} + +define i1 @null_gep_ult_global() { +; CHECK-LABEL: @null_gep_ult_global( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr [2 x i32], [2 x i32]* null, i64 ptrtoint (i32* @g2 to i64) + %cmp = icmp ult [2 x i32]* %gep, @g + ret i1 %cmp +} + +define i1 @null_gep_slt_global() { +; CHECK-LABEL: @null_gep_slt_global( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr [2 x i32], [2 x i32]* null, i64 ptrtoint (i32* @g2 to i64) + %cmp = icmp slt [2 x i32]* %gep, @g + ret i1 %cmp +} + +define i1 @global_gep_ne_global() { +; CHECK-LABEL: @global_gep_ne_global( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr inbounds [2 x i32], [2 x i32]* @g, i64 1 + %cmp = icmp ne [2 x i32]* %gep, @g + ret i1 %cmp +} + +define i1 @global_gep_ugt_global() { +; CHECK-LABEL: @global_gep_ugt_global( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr inbounds [2 x i32], [2 x i32]* @g, i64 1 + %cmp = icmp ugt [2 x i32]* %gep, @g + ret i1 %cmp +} + +define i1 @global_gep_sgt_global() { +; CHECK-LABEL: @global_gep_sgt_global( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr inbounds [2 x i32], [2 x i32]* @g, i64 1 + %cmp = icmp sgt [2 x i32]* %gep, @g + ret i1 %cmp +} + +define i1 @global_gep_ugt_global_neg_offset() { +; CHECK-LABEL: @global_gep_ugt_global_neg_offset( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr [2 x i32], [2 x i32]* @g, i64 -1 + %cmp = icmp ugt [2 x i32]* %gep, @g + ret i1 %cmp +} + +define i1 @global_gep_sgt_global_neg_offset() { +; CHECK-LABEL: @global_gep_sgt_global_neg_offset( +; CHECK-NEXT: ret i1 true +; + %gep = getelementptr [2 x i32], [2 x i32]* @g, i64 -1 + %cmp = icmp sgt [2 x i32]* %gep, @g + ret i1 %cmp +} -- 2.7.4