Author: Nikita Popov Date: 2022-01-25T12:38:37+01:00 New Revision: caff8591eff211c41d8de8505f89754d09ca6fa7
URL: https://github.com/llvm/llvm-project/commit/caff8591eff211c41d8de8505f89754d09ca6fa7 DIFF: https://github.com/llvm/llvm-project/commit/caff8591eff211c41d8de8505f89754d09ca6fa7.diff LOG: [OpenMP] Simplify pointer comparison Rather than checking ptrdiff(a, b) != 0, directly check a != b. Added: Modified: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/test/OpenMP/declare_mapper_codegen.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index c8c08060e729e..233656b90095b 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -10217,8 +10217,7 @@ void CGOpenMPRuntime::emitUDMapperArrayInitOrDel( llvm::Value *Cond; if (IsInit) { // base != begin? - llvm::Value *BaseIsBegin = MapperCGF.Builder.CreateIsNotNull( - MapperCGF.Builder.CreatePtrDiff(Base, Begin)); + llvm::Value *BaseIsBegin = MapperCGF.Builder.CreateICmpNE(Base, Begin); // IsPtrAndObj? llvm::Value *PtrAndObjBit = MapperCGF.Builder.CreateAnd( MapType, diff --git a/clang/test/OpenMP/declare_mapper_codegen.cpp b/clang/test/OpenMP/declare_mapper_codegen.cpp index 053aa9d2cc6df..e114a1315c79f 100644 --- a/clang/test/OpenMP/declare_mapper_codegen.cpp +++ b/clang/test/OpenMP/declare_mapper_codegen.cpp @@ -102,11 +102,7 @@ class C { // CK0-DAG: [[ISARRAY:%.+]] = icmp sgt i64 [[SIZE]], 1 // CK0-DAG: [[PTRBEGIN:%.+]] = bitcast i8* [[BEGIN]] to %class.C* // CK0-DAG: [[PTREND:%.+]] = getelementptr %class.C, %class.C* [[PTRBEGIN]], i64 [[SIZE]] -// CK0-DAG: [[BPTRI:%.+]] = ptrtoint i8* [[BPTR]] to i64 -// CK0-DAG: [[PTRI:%.+]] = ptrtoint i8* [[BEGIN]] to i64 -// CK0-DAG: [[DIF:%.+]] = sub i64 [[BPTRI]], [[PTRI]] -// CK0-DAG: [[NORM:%.+]] = sdiv exact i64 [[DIF]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) -// CK0-DAG: [[PTRSNE:%.+]] = icmp ne i64 [[NORM]], 0 +// CK0-DAG: [[PTRSNE:%.+]] = icmp ne i8* [[BPTR]], [[BEGIN]] // CK0-DAG: [[PTRANDOBJ:%.+]] = and i64 [[TYPE]], 16 // CK0-DAG: [[ISPTRANDOBJ:%.+]] = icmp ne i64 [[PTRANDOBJ]], 0 // CK0-DAG: [[CMPA:%.+]] = and i1 [[PTRSNE]], [[ISPTRANDOBJ]] @@ -662,11 +658,7 @@ class C { // CK1-DAG: [[PTRBEGIN:%.+]] = bitcast i8* [[BEGIN]] to %class.C* // CK1-DAG: [[PTREND:%.+]] = getelementptr %class.C, %class.C* [[PTRBEGIN]], i64 [[SIZE]] // CK1-DAG: [[ISARRAY:%.+]] = icmp sgt i64 [[SIZE]], 1 -// CK1-DAG: [[BPTRI:%.+]] = ptrtoint i8* [[BPTR]] to i64 -// CK1-DAG: [[PTRI:%.+]] = ptrtoint i8* [[BEGIN]] to i64 -// CK1-DAG: [[DIF:%.+]] = sub i64 [[BPTRI]], [[PTRI]] -// CK1-DAG: [[NORM:%.+]] = sdiv exact i64 [[DIF]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) -// CK1-DAG: [[PTRSNE:%.+]] = icmp ne i64 [[NORM]], 0 +// CK1-DAG: [[PTRSNE:%.+]] = icmp ne i8* [[BPTR]], [[BEGIN]] // CK1-DAG: [[PTRANDOBJ:%.+]] = and i64 [[TYPE]], 16 // CK1-DAG: [[ISPTRANDOBJ:%.+]] = icmp ne i64 [[PTRANDOBJ]], 0 // CK1-DAG: [[CMPA:%.+]] = and i1 [[PTRSNE]], [[ISPTRANDOBJ]] @@ -789,11 +781,7 @@ class C { // CK2-DAG: [[PTRBEGIN:%.+]] = bitcast i8* [[BEGIN]] to %class.C* // CK2-DAG: [[PTREND:%.+]] = getelementptr %class.C, %class.C* [[PTRBEGIN]], i64 [[SIZE]] // CK2-DAG: [[ISARRAY:%.+]] = icmp sgt i64 [[SIZE]], 1 -// CK2-DAG: [[BPTRI:%.+]] = ptrtoint i8* [[BPTR]] to i64 -// CK2-DAG: [[PTRI:%.+]] = ptrtoint i8* [[BEGIN]] to i64 -// CK2-DAG: [[DIF:%.+]] = sub i64 [[BPTRI]], [[PTRI]] -// CK2-DAG: [[NORM:%.+]] = sdiv exact i64 [[DIF]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) -// CK2-DAG: [[PTRSNE:%.+]] = icmp ne i64 [[NORM]], 0 +// CK2-DAG: [[PTRSNE:%.+]] = icmp ne i8* [[BPTR]], [[BEGIN]] // CK2-DAG: [[PTRANDOBJ:%.+]] = and i64 [[TYPE]], 16 // CK2-DAG: [[ISPTRANDOBJ:%.+]] = icmp ne i64 [[PTRANDOBJ]], 0 // CK2-DAG: [[CMPA:%.+]] = and i1 [[PTRSNE]], [[ISPTRANDOBJ]] @@ -999,11 +987,7 @@ class C { // CK4-DAG: [[PTRBEGIN:%.+]] = bitcast i8* [[BEGIN]] to %class.C* // CK4-DAG: [[PTREND:%.+]] = getelementptr %class.C, %class.C* [[PTRBEGIN]], i64 [[SIZE]] // CK4-DAG: [[ISARRAY:%.+]] = icmp sgt i64 [[SIZE]], 1 -// CK4-DAG: [[BPTRI:%.+]] = ptrtoint i8* [[BPTR]] to i64 -// CK4-DAG: [[PTRI:%.+]] = ptrtoint i8* [[BEGIN]] to i64 -// CK4-DAG: [[DIF:%.+]] = sub i64 [[BPTRI]], [[PTRI]] -// CK4-DAG: [[NORM:%.+]] = sdiv exact i64 [[DIF]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) -// CK4-DAG: [[PTRSNE:%.+]] = icmp ne i64 [[NORM]], 0 +// CK4-DAG: [[PTRSNE:%.+]] = icmp ne i8* [[BPTR]], [[BEGIN]] // CK4-DAG: [[PTRANDOBJ:%.+]] = and i64 [[TYPE]], 16 // CK4-DAG: [[ISPTRANDOBJ:%.+]] = icmp ne i64 [[PTRANDOBJ]], 0 // CK4-DAG: [[CMPA:%.+]] = and i1 [[PTRSNE]], [[ISPTRANDOBJ]] _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits