[PATCH] D76283: [IRBuilder] Use preferred target type for len argument of memory intrinsic functions

2020-06-10 Thread Konstantin Schwarz via Phabricator via cfe-commits
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

2020-06-10 Thread Konstantin Schwarz via Phabricator via cfe-commits
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

2020-10-15 Thread Konstantin Schwarz via Phabricator via cfe-commits
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

2020-10-15 Thread Konstantin Schwarz via Phabricator via cfe-commits
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

2020-10-16 Thread Konstantin Schwarz via Phabricator via cfe-commits
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

2020-03-17 Thread Konstantin Schwarz via Phabricator via cfe-commits
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

2020-03-17 Thread Konstantin Schwarz via Phabricator via cfe-commits
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

2020-02-07 Thread Konstantin Schwarz via Phabricator via cfe-commits
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