[PATCH] D59367: [Sema] Adjust address space of operands in remaining builtin operators
Phabricator via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 19 09:49:31 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rC356475: [Sema] Adjust addr space of reference operand in compound assignment (authored by stulova, committed by ).
Herald added a subscriber: kristina.
Herald added a project: clang.
Repository:
rC Clang
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D59367/new/
https://reviews.llvm.org/D59367
Files:
lib/Sema/SemaOverload.cpp
test/CodeGenOpenCLCXX/addrspace-operators.cl
Index: test/CodeGenOpenCLCXX/addrspace-operators.cl
===================================================================
--- test/CodeGenOpenCLCXX/addrspace-operators.cl
+++ test/CodeGenOpenCLCXX/addrspace-operators.cl
@@ -14,6 +14,8 @@
};
__global E globE;
+volatile __global int globVI;
+__global int globI;
//CHECK-LABEL: define spir_func void @_Z3barv()
void bar() {
C c;
@@ -25,13 +27,18 @@
c.OrAssign(a);
E e;
- // CHECK: store i32 1, i32* %e
+ //CHECK: store i32 1, i32* %e
e = b;
- // CHECK: store i32 0, i32 addrspace(1)* @globE
+ //CHECK: store i32 0, i32 addrspace(1)* @globE
globE = a;
- // FIXME: Sema fails here because it thinks the types are incompatible.
- //e = b;
- //globE = a;
+ //CHECK: store i32 %or, i32 addrspace(1)* @globI
+ globI |= b;
+ //CHECK: store i32 %add, i32 addrspace(1)* @globI
+ globI += a;
+ //CHECK: store volatile i32 %and, i32 addrspace(1)* @globVI
+ globVI &= b;
+ //CHECK: store volatile i32 %sub, i32 addrspace(1)* @globVI
+ globVI -= a;
}
//CHECK: define linkonce_odr void @_ZNU3AS41C6AssignE1E(%class.C addrspace(4)* %this, i32 %e)
Index: lib/Sema/SemaOverload.cpp
===================================================================
--- lib/Sema/SemaOverload.cpp
+++ lib/Sema/SemaOverload.cpp
@@ -8513,17 +8513,16 @@
Right < LastPromotedArithmeticType; ++Right) {
QualType ParamTypes[2];
ParamTypes[1] = ArithmeticTypes[Right];
-
+ auto LeftBaseTy = AdjustAddressSpaceForBuiltinOperandType(
+ S, ArithmeticTypes[Left], Args[0]);
// Add this built-in operator as a candidate (VQ is empty).
- ParamTypes[0] =
- S.Context.getLValueReferenceType(ArithmeticTypes[Left]);
+ ParamTypes[0] = S.Context.getLValueReferenceType(LeftBaseTy);
S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet,
/*IsAssigmentOperator=*/isEqualOp);
// Add this built-in operator as a candidate (VQ is 'volatile').
if (VisibleTypeConversionsQuals.hasVolatile()) {
- ParamTypes[0] =
- S.Context.getVolatileType(ArithmeticTypes[Left]);
+ ParamTypes[0] = S.Context.getVolatileType(LeftBaseTy);
ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet,
/*IsAssigmentOperator=*/isEqualOp);
@@ -8579,15 +8578,14 @@
Right < LastPromotedIntegralType; ++Right) {
QualType ParamTypes[2];
ParamTypes[1] = ArithmeticTypes[Right];
-
+ auto LeftBaseTy = AdjustAddressSpaceForBuiltinOperandType(
+ S, ArithmeticTypes[Left], Args[0]);
// Add this built-in operator as a candidate (VQ is empty).
- ParamTypes[0] = S.Context.getLValueReferenceType(
- AdjustAddressSpaceForBuiltinOperandType(S, ArithmeticTypes[Left],
- Args[0]));
+ ParamTypes[0] = S.Context.getLValueReferenceType(LeftBaseTy);
S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet);
if (VisibleTypeConversionsQuals.hasVolatile()) {
// Add this built-in operator as a candidate (VQ is 'volatile').
- ParamTypes[0] = ArithmeticTypes[Left];
+ ParamTypes[0] = LeftBaseTy;
ParamTypes[0] = S.Context.getVolatileType(ParamTypes[0]);
ParamTypes[0] = S.Context.getLValueReferenceType(ParamTypes[0]);
S.AddBuiltinCandidate(ParamTypes, Args, CandidateSet);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59367.191333.patch
Type: text/x-patch
Size: 3550 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190319/1a76f39b/attachment.bin>
More information about the cfe-commits
mailing list