[PATCH] D76283: [IRBuilder] Use preferred target type for len argument of memory intrinsic functions
kschwarz updated this revision to Diff 269789. kschwarz added a comment. Herald added a project: LLVM. Brining this up again Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76283/new/ https://reviews.llvm.org/D76283 Files: clang/test/CodeGen/c11atomics-ios.c clang/test/CodeGen/c11atomics.c clang/test/CodeGen/x86-atomic-long_double.c clang/test/CodeGenCXX/pod-member-memcpys.cpp clang/test/CodeGenCXX/pr20897.cpp llvm/include/llvm/IR/IRBuilder.h llvm/test/Transforms/MemCpyOpt/form-memset.ll Index: llvm/test/Transforms/MemCpyOpt/form-memset.ll === --- llvm/test/Transforms/MemCpyOpt/form-memset.ll +++ llvm/test/Transforms/MemCpyOpt/form-memset.ll @@ -50,7 +50,7 @@ ret void ; CHECK-LABEL: @test1( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64 +; CHECK: call void @llvm.memset.p0i8.i32 ; CHECK-NOT: store ; CHECK: ret } @@ -152,11 +152,11 @@ ; CHECK-LABEL: @test2( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 1 %tmp41, i8 -1, i64 8, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 1 %tmp41, i8 -1, i32 8, i1 false) ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 8 %0, i8 0, i64 32, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 8 %0, i8 0, i32 32, i1 false) ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 8 %1, i8 0, i64 32, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 8 %1, i8 0, i32 32, i1 false) ; CHECK-NOT: store ; CHECK: ret } @@ -175,7 +175,7 @@ ret void ; CHECK-LABEL: @test3( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 15, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 0, i32 15, i1 false) } ; store followed by memset, different offset scenario @@ -188,7 +188,7 @@ ret void ; CHECK-LABEL: @test4( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 15, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 0, i32 15, i1 false) } declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind @@ -204,7 +204,7 @@ ret void ; CHECK-LABEL: @test5( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 15, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 0, i32 15, i1 false) } ;; Memset followed by memset. @@ -217,7 +217,7 @@ tail call void @llvm.memset.p0i8.i64(i8* %1, i8 0, i64 12, i1 false) ret void ; CHECK-LABEL: @test6( -; CHECK: call void @llvm.memset.p0i8.i64(i8* %2, i8 0, i64 24, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 24, i1 false) } ; More aggressive heuristic @@ -233,7 +233,7 @@ %4 = getelementptr inbounds i32, i32* %c, i32 4 store i32 -1, i32* %4, align 4 ; CHECK-LABEL: @test7( -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %5, i8 -1, i64 20, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %5, i8 -1, i32 20, i1 false) ret void } @@ -270,7 +270,7 @@ store i8 -1, i8* getelementptr (i8, i8* bitcast ([16 x i64]* @test9buf to i8*), i64 15), align 1 ret void ; CHECK-LABEL: @test9( -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([16 x i64]* @test9buf to i8*), i8 -1, i64 16, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 16 bitcast ([16 x i64]* @test9buf to i8*), i8 -1, i32 16, i1 false) } ; PR19092 @@ -280,7 +280,7 @@ ret void ; CHECK-LABEL: @test10( ; CHECK-NOT: memset -; CHECK: call void @llvm.memset.p0i8.i64(i8* %P, i8 0, i64 42, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* %P, i8 0, i32 42, i1 false) ; CHECK-NOT: memset ; CHECK: ret void } @@ -297,7 +297,7 @@ ret void ; CHECK-LABEL: @test11( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 1, i64 23, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 1, i32 23, i1 false) } ; Alignment should be preserved when there is a store with default align @@ -310,5 +310,5 @@ ret void ; CHECK-LABEL: @test12( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 15, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 0, i32 15, i1 false) } Index: llvm/include/llvm/IR/IRBuilder.h === --- llvm/include/llvm/IR/IRBuilder.h +++ llvm/include/llvm/IR/IRBuilder.h @@ -435,6 +435,16 @@ return ConstantInt::get(Context, AI); } + ConstantInt *getIntPtrSize(Value *Ptr, uint64_t Size) { +assert(BB && "Must have a basic block to retrieve the module!"); + +Module *M = BB->getParent()->getParent(); +auto *PtrType = Ptr->getType(); +unsigned PtrSize = M->getDataLayout().getPointerSizeInBits( +PtrType->getPointerAddressSpace()); +return getIntN(PtrSize, Size)
[PATCH] D76283: [IRBuilder] Use preferred target type for len argument of memory intrinsic functions
kschwarz added a comment. I brought this to the mailing list (http://lists.llvm.org/pipermail/llvm-dev/2020-March/140032.html) but didn't get an answer there. @arsenm, have you any comments regarding @rjmccall's last comment regarding the sizes of pointers in different address spaces? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76283/new/ https://reviews.llvm.org/D76283 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D89453: Fix hidden-redecls.m test for some environments
kschwarz created this revision. kschwarz added reviewers: bnbarham, akyrtzi. Herald added subscribers: arphaman, dexonsmith. Herald added a project: clang. kschwarz requested review of this revision. This test was failing in our CI environment, because Jenkins mounts the workspaces into Docker containers using their full path, i.e. /home/jenkins/workspaces/llvm-build. We've seen permission denied errors because /home/jenkins is mounted with root permissions and the default cache directory under Linux is $HOME/.cache. The fix is to explicitly provide the -fmodules-cache-path, which the other tests already seem to provide. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D89453 Files: clang/test/Index/hidden-redecls.m Index: clang/test/Index/hidden-redecls.m === --- clang/test/Index/hidden-redecls.m +++ clang/test/Index/hidden-redecls.m @@ -7,6 +7,7 @@ // p1_method in protocol P1 is hidden since module_redecls.sub hasn't been // imported yet. Check it is still indexed. -// RUN: c-index-test -index-file-full %s -isystem %S/Inputs -fmodules -target x86_64-apple-macosx10.7 | FileCheck %s +// RUN: rm -rf %t +// RUN: c-index-test -index-file-full %s -isystem %S/Inputs -fmodules -fmodules-cache-path=%t -target x86_64-apple-macosx10.7 | FileCheck %s // CHECK: [indexDeclaration]: kind: objc-instance-method | name: p1_method | {{.*}} | loc: {{.*}}hidden-redecls-sub.h:2:9 | {{.*}} | isRedecl: 0 // CHECK: [indexDeclaration]: kind: objc-instance-method | name: p1_method | {{.*}} | loc: {{.*}}hidden-redecls-sub.h:3:9 | {{.*}} | isRedecl: 1 Index: clang/test/Index/hidden-redecls.m === --- clang/test/Index/hidden-redecls.m +++ clang/test/Index/hidden-redecls.m @@ -7,6 +7,7 @@ // p1_method in protocol P1 is hidden since module_redecls.sub hasn't been // imported yet. Check it is still indexed. -// RUN: c-index-test -index-file-full %s -isystem %S/Inputs -fmodules -target x86_64-apple-macosx10.7 | FileCheck %s +// RUN: rm -rf %t +// RUN: c-index-test -index-file-full %s -isystem %S/Inputs -fmodules -fmodules-cache-path=%t -target x86_64-apple-macosx10.7 | FileCheck %s // CHECK: [indexDeclaration]: kind: objc-instance-method | name: p1_method | {{.*}} | loc: {{.*}}hidden-redecls-sub.h:2:9 | {{.*}} | isRedecl: 0 // CHECK: [indexDeclaration]: kind: objc-instance-method | name: p1_method | {{.*}} | loc: {{.*}}hidden-redecls-sub.h:3:9 | {{.*}} | isRedecl: 1 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D89453: Fix hidden-redecls.m test for some environments
kschwarz added a comment. Yes, I'll commit it tomorrow, thanks for the review @akyrtzi! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D89453/new/ https://reviews.llvm.org/D89453 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D89453: Fix hidden-redecls.m test for some environments
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG6030a075164c: Fix hidden-redecls.m test for some environments (authored by kschwarz). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D89453/new/ https://reviews.llvm.org/D89453 Files: clang/test/Index/hidden-redecls.m Index: clang/test/Index/hidden-redecls.m === --- clang/test/Index/hidden-redecls.m +++ clang/test/Index/hidden-redecls.m @@ -7,6 +7,7 @@ // p1_method in protocol P1 is hidden since module_redecls.sub hasn't been // imported yet. Check it is still indexed. -// RUN: c-index-test -index-file-full %s -isystem %S/Inputs -fmodules -target x86_64-apple-macosx10.7 | FileCheck %s +// RUN: rm -rf %t +// RUN: c-index-test -index-file-full %s -isystem %S/Inputs -fmodules -fmodules-cache-path=%t -target x86_64-apple-macosx10.7 | FileCheck %s // CHECK: [indexDeclaration]: kind: objc-instance-method | name: p1_method | {{.*}} | loc: {{.*}}hidden-redecls-sub.h:2:9 | {{.*}} | isRedecl: 0 // CHECK: [indexDeclaration]: kind: objc-instance-method | name: p1_method | {{.*}} | loc: {{.*}}hidden-redecls-sub.h:3:9 | {{.*}} | isRedecl: 1 Index: clang/test/Index/hidden-redecls.m === --- clang/test/Index/hidden-redecls.m +++ clang/test/Index/hidden-redecls.m @@ -7,6 +7,7 @@ // p1_method in protocol P1 is hidden since module_redecls.sub hasn't been // imported yet. Check it is still indexed. -// RUN: c-index-test -index-file-full %s -isystem %S/Inputs -fmodules -target x86_64-apple-macosx10.7 | FileCheck %s +// RUN: rm -rf %t +// RUN: c-index-test -index-file-full %s -isystem %S/Inputs -fmodules -fmodules-cache-path=%t -target x86_64-apple-macosx10.7 | FileCheck %s // CHECK: [indexDeclaration]: kind: objc-instance-method | name: p1_method | {{.*}} | loc: {{.*}}hidden-redecls-sub.h:2:9 | {{.*}} | isRedecl: 0 // CHECK: [indexDeclaration]: kind: objc-instance-method | name: p1_method | {{.*}} | loc: {{.*}}hidden-redecls-sub.h:3:9 | {{.*}} | isRedecl: 1 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D76283: [IRBuilder] Use preferred target type for len argument of memory intrinsic functions
kschwarz created this revision. kschwarz added reviewers: rjmccall, gchatelet, aemerson. Herald added subscribers: cfe-commits, jfb. Herald added a project: clang. The IR builder hard-coded the type of the `len` argument of the memory function instrinsics to i64 for several builder functions. During instruction selection of these intrinsics to the corresponding C library functions SelectionDAG ignores the type of the len argument and uses the targets preferred type. GlobalISel however translates these calls using the actual types of the intrinsic, which will miscompile on 32-bit architectures. Using the preferred type when creating the intrinsic call in the first place fixes this issue. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D76283 Files: clang/test/CodeGen/c11atomics-ios.c clang/test/CodeGen/c11atomics.c clang/test/CodeGen/x86-atomic-long_double.c clang/test/CodeGenCXX/pod-member-memcpys.cpp clang/test/CodeGenCXX/pr20897.cpp llvm/include/llvm/IR/IRBuilder.h llvm/test/Transforms/MemCpyOpt/form-memset.ll Index: llvm/test/Transforms/MemCpyOpt/form-memset.ll === --- llvm/test/Transforms/MemCpyOpt/form-memset.ll +++ llvm/test/Transforms/MemCpyOpt/form-memset.ll @@ -50,7 +50,7 @@ ret void ; CHECK-LABEL: @test1( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64 +; CHECK: call void @llvm.memset.p0i8.i32 ; CHECK-NOT: store ; CHECK: ret } @@ -152,11 +152,11 @@ ; CHECK-LABEL: @test2( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 1 %tmp41, i8 -1, i64 8, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 1 %tmp41, i8 -1, i32 8, i1 false) ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 8 %0, i8 0, i64 32, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 8 %0, i8 0, i32 32, i1 false) ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 8 %1, i8 0, i64 32, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 8 %1, i8 0, i32 32, i1 false) ; CHECK-NOT: store ; CHECK: ret } @@ -175,7 +175,7 @@ ret void ; CHECK-LABEL: @test3( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 15, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 0, i32 15, i1 false) } ; store followed by memset, different offset scenario @@ -188,7 +188,7 @@ ret void ; CHECK-LABEL: @test4( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 15, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 0, i32 15, i1 false) } declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind @@ -204,7 +204,7 @@ ret void ; CHECK-LABEL: @test5( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 15, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 0, i32 15, i1 false) } ;; Memset followed by memset. @@ -217,7 +217,7 @@ tail call void @llvm.memset.p0i8.i64(i8* %1, i8 0, i64 12, i1 false) ret void ; CHECK-LABEL: @test6( -; CHECK: call void @llvm.memset.p0i8.i64(i8* %2, i8 0, i64 24, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* %2, i8 0, i32 24, i1 false) } ; More aggressive heuristic @@ -233,7 +233,7 @@ %4 = getelementptr inbounds i32, i32* %c, i32 4 store i32 -1, i32* %4, align 4 ; CHECK-LABEL: @test7( -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %5, i8 -1, i64 20, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %5, i8 -1, i32 20, i1 false) ret void } @@ -270,7 +270,7 @@ store i8 -1, i8* getelementptr (i8, i8* bitcast ([16 x i64]* @test9buf to i8*), i64 15), align 1 ret void ; CHECK-LABEL: @test9( -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([16 x i64]* @test9buf to i8*), i8 -1, i64 16, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 16 bitcast ([16 x i64]* @test9buf to i8*), i8 -1, i32 16, i1 false) } ; PR19092 @@ -280,7 +280,7 @@ ret void ; CHECK-LABEL: @test10( ; CHECK-NOT: memset -; CHECK: call void @llvm.memset.p0i8.i64(i8* %P, i8 0, i64 42, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* %P, i8 0, i32 42, i1 false) ; CHECK-NOT: memset ; CHECK: ret void } @@ -297,7 +297,7 @@ ret void ; CHECK-LABEL: @test11( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 1, i64 23, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 1, i32 23, i1 false) } ; Alignment should be preserved when there is a store with default align @@ -310,5 +310,5 @@ ret void ; CHECK-LABEL: @test12( ; CHECK-NOT: store -; CHECK: call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 15, i1 false) +; CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %1, i8 0, i32 15, i1 false) } Index: llvm/include/llvm/IR/IRBuilder.h
[PATCH] D76283: [IRBuilder] Use preferred target type for len argument of memory intrinsic functions
kschwarz added a comment. Correct, it will still miscompile even with this change. I see two options: either 1) extend GlobalISel to select to the appropriate type, or 2) declare this as illegal LLVM IR in the first place. 1. will introduce an implicit truncation of the i64 argument (same as SelectionDAG does today). In practice this seems to work, but it feels broken 2. I'm not sure whether it should be illegal to create an i64 version of the llvm.mem* intrinsics on 32-bit architectures. Thoughts? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76283/new/ https://reviews.llvm.org/D76283 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74168: [CMake] Make EXCLUDE_FROM_ALL an argument to add_lit_testsuite
kschwarz added inline comments. Comment at: llvm/test/CMakeLists.txt:171 +if(LLVM_BUILD_TOOLS) + set(exclude_from_check_all "EXCLUDE_FROM_CHECK_ALL") Hi @JDevlieghere, we've noticed that with this patch check-llvm isn't added to check-all anymore by default. Is this the intended behaviour? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74168/new/ https://reviews.llvm.org/D74168 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits