Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SYCL] Add support for union types as kernel parameter #2285

Merged
merged 27 commits into from
Aug 17, 2020

Conversation

smanna12
Copy link
Contributor

@smanna12 smanna12 commented Aug 7, 2020

This patch adds support for union types kernel arguments.
- Add 'VisitUnion' function.
- Add separate handler to implement a diagnostic on attempt to pass union with accessor/sampler/stream member
as a kernel argument.
- Add CodeGen/Sema/Intengreation header/runtime tests.

Signed-off-by: Soumi Manna soumi.manna@intel.com

Signed-off-by: Soumi Manna <soumi.manna@intel.com>
@smanna12 smanna12 changed the title [SYCL] Add support for union [[SYCL] Add support for union types as kernel parameter Aug 7, 2020
@smanna12 smanna12 changed the title [[SYCL] Add support for union types as kernel parameter [SYCL] Add support for union types as kernel parameter Aug 7, 2020
@smanna12
Copy link
Contributor Author

smanna12 commented Aug 7, 2020

@erichkeane, I have not added any tests yet. I am working on it. This patch adds the changes from PR #2270 and adds a separate handler SyclKernelUnionBodyChecker for the diagnostic. Could you please review this change?

Copy link
Contributor

@erichkeane erichkeane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks right to me. When writing the union tests, make sure you use one in an array to make sure it is properly passed. Also, a struct-with-an-array-of-unions, and a array-of-struct-with-a-union.

Otherwise, LGTM once we get sufficient tests.

clang/lib/Sema/SemaSYCL.cpp Show resolved Hide resolved
clang/lib/Sema/SemaSYCL.cpp Show resolved Hide resolved
clang/lib/Sema/SemaSYCL.cpp Outdated Show resolved Hide resolved
@smanna12
Copy link
Contributor Author

Thanks Erich for the review and comments.

The following test compiles fine. I am passing accessor array as a member inside union.
The test is supposed to fail since Accessor is not allowed inside union. Am i missing anything here?

@erichkeane any thought?

smanna@scsel-cfl-05:/export/iusers/smanna/myworkws/llvm/clang/test/SemaSYCL$ cat test.cpp
// RUN: %clang_cc1 -I %S/Inputs -fsycl -fsycl-is-device -fcxx-exceptions -verify -fsyntax-only %s

#include <sycl.hpp>

using namespace cl::sycl;

template <typename name, typename Func>
attribute((sycl_kernel)) void a_kernel(Func kernelFunc) {
kernelFunc();
}

int main() {

using Accessor =
accessor<int, 1, access::mode::read_write, access::target::global_buffer>;

union union_acc_t {
Accessor member_acc[2];
} union_acc;

a_kernel(
= {
union_acc.member_acc[2].use();
});
}

@erichkeane
Copy link
Contributor

Thanks Erich for the review and comments.

The following test compiles fine. I am passing accessor array as a member inside union.
The test is supposed to fail since Accessor is not allowed inside union. Am i missing anything here?

@erichkeane any thought?

smanna@scsel-cfl-05:/export/iusers/smanna/myworkws/llvm/clang/test/SemaSYCL$ cat test.cpp
// RUN: %clang_cc1 -I %S/Inputs -fsycl -fsycl-is-device -fcxx-exceptions -verify -fsyntax-only %s

#include <sycl.hpp>

using namespace cl::sycl;

template <typename name, typename Func>
attribute((sycl_kernel)) void a_kernel(Func kernelFunc) {
kernelFunc();
}

int main() {

using Accessor =
accessor<int, 1, access::mode::read_write, access::target::global_buffer>;

union union_acc_t {
Accessor member_acc[2];
} union_acc;

a_kernel(
= {
union_acc.member_acc[2].use();
});
}

Hmm... do you perhaps also have to handle the array-element function? Or is that not properly visiting its types? @elizabethandrews : Do you know why the visitor wouldn't be visiting the elements of an array?

@elizabethandrews
Copy link
Contributor

Thanks Erich for the review and comments.
The following test compiles fine. I am passing accessor array as a member inside union.
The test is supposed to fail since Accessor is not allowed inside union. Am i missing anything here?
@erichkeane any thought?
smanna@scsel-cfl-05:/export/iusers/smanna/myworkws/llvm/clang/test/SemaSYCL$ cat test.cpp
// RUN: %clang_cc1 -I %S/Inputs -fsycl -fsycl-is-device -fcxx-exceptions -verify -fsyntax-only %s
#include <sycl.hpp>
using namespace cl::sycl;
template <typename name, typename Func>
attribute((sycl_kernel)) void a_kernel(Func kernelFunc) {
kernelFunc();
}
int main() {
using Accessor =
accessor<int, 1, access::mode::read_write, access::target::global_buffer>;
union union_acc_t {
Accessor member_acc[2];
} union_acc;
a_kernel(
= {
union_acc.member_acc[2].use();
});
}

Hmm... do you perhaps also have to handle the array-element function? Or is that not properly visiting its types? @elizabethandrews : Do you know why the visitor wouldn't be visiting the elements of an array?

I don't know why it wouldn't visit the elements. I haven't had a chance to look at Erich's template changes properly. I need to actually step through it to understand what is happening. It is quite complicated.

Array elements are handled in VisitElement. Am I right in understanding that the call to 'handleSyclAccessorType' here should call the handler defined in SyclKernelUnionBodyChecker?

@erichkeane
Copy link
Contributor

Thanks Erich for the review and comments.
The following test compiles fine. I am passing accessor array as a member inside union.
The test is supposed to fail since Accessor is not allowed inside union. Am i missing anything here?
@erichkeane any thought?
smanna@scsel-cfl-05:/export/iusers/smanna/myworkws/llvm/clang/test/SemaSYCL$ cat test.cpp
// RUN: %clang_cc1 -I %S/Inputs -fsycl -fsycl-is-device -fcxx-exceptions -verify -fsyntax-only %s
#include <sycl.hpp>
using namespace cl::sycl;
template <typename name, typename Func>
attribute((sycl_kernel)) void a_kernel(Func kernelFunc) {
kernelFunc();
}
int main() {
using Accessor =
accessor<int, 1, access::mode::read_write, access::target::global_buffer>;
union union_acc_t {
Accessor member_acc[2];
} union_acc;
a_kernel(
= {
union_acc.member_acc[2].use();
});
}

Hmm... do you perhaps also have to handle the array-element function? Or is that not properly visiting its types? @elizabethandrews : Do you know why the visitor wouldn't be visiting the elements of an array?

I don't know why it wouldn't visit the elements. I haven't had a chance to look at Erich's template changes properly. I need to actually step through it to understand what is happening. It is quite complicated.

Array elements are handled in VisitElement. Am I right in understanding that the call to 'handleSyclAccessorType' here should call the handler defined in SyclKernelUnionBodyChecker?

I don't think my union changes really matter here. I'd expect the visitor to visit the elements themselves (via VisitUnion?), then each of the sub-elements to it. VisitElement calls VisitUnion in this patch, so I'd expect that to work? Or did I screw up the visiting there or something? Perhaps we need a bit of time to be debugging.

@elizabethandrews
Copy link
Contributor

Thanks Erich for the review and comments.
The following test compiles fine. I am passing accessor array as a member inside union.
The test is supposed to fail since Accessor is not allowed inside union. Am i missing anything here?
@erichkeane any thought?
smanna@scsel-cfl-05:/export/iusers/smanna/myworkws/llvm/clang/test/SemaSYCL$ cat test.cpp
// RUN: %clang_cc1 -I %S/Inputs -fsycl -fsycl-is-device -fcxx-exceptions -verify -fsyntax-only %s
#include <sycl.hpp>
using namespace cl::sycl;
template <typename name, typename Func>
attribute((sycl_kernel)) void a_kernel(Func kernelFunc) {
kernelFunc();
}
int main() {
using Accessor =
accessor<int, 1, access::mode::read_write, access::target::global_buffer>;
union union_acc_t {
Accessor member_acc[2];
} union_acc;
a_kernel(
= {
union_acc.member_acc[2].use();
});
}

Hmm... do you perhaps also have to handle the array-element function? Or is that not properly visiting its types? @elizabethandrews : Do you know why the visitor wouldn't be visiting the elements of an array?

I don't know why it wouldn't visit the elements. I haven't had a chance to look at Erich's template changes properly. I need to actually step through it to understand what is happening. It is quite complicated.
Array elements are handled in VisitElement. Am I right in understanding that the call to 'handleSyclAccessorType' here should call the handler defined in SyclKernelUnionBodyChecker?

I don't think my union changes really matter here. I'd expect the visitor to visit the elements themselves (via VisitUnion?), then each of the sub-elements to it. VisitElement calls VisitUnion in this patch, so I'd expect that to work? Or did I screw up the visiting there or something? Perhaps we need a bit of time to be debugging.

The handlers in VisitElement are to handle individual elements of an array. For example, add __init calls for each accessor element. I don't fully understand your patch yet. I need to step through it but I think VisitUnion here means you're handling an array of unions.

@erichkeane
Copy link
Contributor

Ah, I might have it :) The union-checker is never added in ConstructOpenCLKernel as a new visitor! Add it after 'checker'.

@smanna12
Copy link
Contributor Author

Thanks Erich for the review and comments.
The following test compiles fine. I am passing accessor array as a member inside union.
The test is supposed to fail since Accessor is not allowed inside union. Am i missing anything here?
@erichkeane any thought?
smanna@scsel-cfl-05:/export/iusers/smanna/myworkws/llvm/clang/test/SemaSYCL$ cat test.cpp
// RUN: %clang_cc1 -I %S/Inputs -fsycl -fsycl-is-device -fcxx-exceptions -verify -fsyntax-only %s
#include <sycl.hpp>
using namespace cl::sycl;
template <typename name, typename Func>
attribute((sycl_kernel)) void a_kernel(Func kernelFunc) {
kernelFunc();
}
int main() {
using Accessor =
accessor<int, 1, access::mode::read_write, access::target::global_buffer>;
union union_acc_t {
Accessor member_acc[2];
} union_acc;
a_kernel(
= {
union_acc.member_acc[2].use();
});
}

Hmm... do you perhaps also have to handle the array-element function? Or is that not properly visiting its types? @elizabethandrews : Do you know why the visitor wouldn't be visiting the elements of an array?

I don't know why it wouldn't visit the elements. I haven't had a chance to look at Erich's template changes properly. I need to actually step through it to understand what is happening. It is quite complicated.
Array elements are handled in VisitElement. Am I right in understanding that the call to 'handleSyclAccessorType' here should call the handler defined in SyclKernelUnionBodyChecker?

I don't think my union changes really matter here. I'd expect the visitor to visit the elements themselves (via VisitUnion?), then each of the sub-elements to it. VisitElement calls VisitUnion in this patch, so I'd expect that to work? Or did I screw up the visiting there or something? Perhaps we need a bit of time to be debugging.

The handlers in VisitElement are to handle individual elements of an array. For example, add __init calls for each accessor element. I don't fully understand your patch yet. I need to step through it but I think VisitUnion here means you're handling an array of unions.

I see that we have added " SyclKernelFieldChecker" in two places:
ConstructOpenCLKernel
SyclKernelDeclCreator

I have not added "SyclKernelUnionBodyChecker " anywhere in the patch. This might cause the issue here.

@erichkeane
Copy link
Contributor

You need it in the ConstructOpenCLKernel function (see my response right above yours :) )

@smanna12
Copy link
Contributor Author

You need it in the ConstructOpenCLKernel function (see my response right above yours :) )

Yes, i missed this. Thanks Erich.

Signed-off-by: Soumi Manna <soumi.manna@intel.com>
Signed-off-by: Soumi Manna <soumi.manna@intel.com>
Signed-off-by: Soumi Manna <soumi.manna@intel.com>
Signed-off-by: Soumi Manna <soumi.manna@intel.com>
Copy link
Contributor

@erichkeane erichkeane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additionally, this needs a test to show the diagnostics happening.

Yes, i am missing diagnostic tests. UnionBodyChecker seems like not working properly. I am debugging this issue. The following test expects to fail since we are trying to pass accessor array inside union. This test generates no diagnostic. Same is happening with sampler/stream.

// RUN: %clang_cc1 -I %S/Inputs -fsycl -fsycl-is-device -fcxx-exceptions -verify -fsyntax-only %s
#include <sycl.hpp>
using namespace cl::sycl;
template <typename name, typename Func>
attribute((sycl_kernel)) void a_kernel(Func kernelFunc) {
kernelFunc();
}
int main() {
using Accessor =
accessor<int, 1, access::mode::read_write, access::target::global_buffer>;
union union_acc_t {
Accessor member_acc[2];
} union_acc;

a_kernel(
= {
union_acc.member_acc[2].use();
});
}

clang/lib/Sema/SemaSYCL.cpp Show resolved Hide resolved
// A type to Create and own the FunctionDecl for the kernel.
class SyclKernelDeclCreator : public SyclKernelFieldHandler {
FunctionDecl *KernelDecl;
llvm::SmallVector<ParmVarDecl *, 8> Params;
SyclKernelFieldChecker &ArgChecker;
SyclKernelUnionBodyChecker &ArgChecker1;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd probably call this 'UnionChecker'. Additionally, note that #2289 makes this part unnecessary.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. I will change that.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, looking again, adding ArgChecker1 is completely unnecessary. ArgChecker itself is completely unnecessary here too (and likely should be removed). I remove it in #2289 (depending on when that gets in), but it seems to be a leftover from when it was necessary.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems like only place we can add this handler "SyclKernelUnionBodyChecker checker1(*this)" to ConstructOpenCLKernel.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, I thought you would have noticed trying to debug why diagnostics weren't working right, but it needs to be added to these two lines instead:

Visitor.VisitRecordBases(KernelObj, checker, kernel_decl, kernel_body,
int_header);

Visitor.VisitRecordFields(KernelObj, checker, kernel_decl, kernel_body,
int_header);

// CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = {
// CHECK-NEXT: //--- _ZTSZZ5test0vENK3$_0clERN2cl4sycl7handlerEE8MyKernel
// CHECK-NEXT: { kernel_param_kind_t::kind_accessor, 4062, 0 },
// CHECK-NEXT: { kernel_param_kind_t::kind_std_layout, 12, 16 },
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is right, is it? 'S' is just the union, right? We should be capturing that as a single std_layout, not as however many these are.

}
}

// CHECK MyKernel parameters
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@elizabethandrews can you take a look at this? The union should be a simple un-decomposed value.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the Sema tests below, it looks like parameters are being passed individually as well? This in incorrect right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the test seems incorrect. I will update the test. Thanks Erich and Elizabeth.

// Check kernel_A parameters
// CHECK: FunctionDecl {{.*}}kernel_A{{.*}} 'void (union union_acc_t, int, int)'
// CHECK-NEXT: ParmVarDecl {{.*}} used _arg_ 'union union_acc_t':'union_acc_t'
// CHECK-NEXT: ParmVarDecl {{.*}} used _arg_member_acc 'int'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks decomposition is happening ? member_acc is the union array. This should not be passed as individual parameters right? It looks like you are passing the 'not-decomposed' union as well as it's fields?


typedef float realw;

typedef union dpct_type_54e08f {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add more than one field in this union? Also why do we need the typedefs? A simple test with 2-3 non-array fields will be best to check basic functionality.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep! I also want to see an:

array of unions. (should be 1 union per element)

Array of structs-with-unions. (should be decomposed structs, but unions still only a single).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will update tests.

// A type to check the validity of passing union with accessor/sampler/stream
// member as a kernel argument types.
class SyclKernelUnionBodyChecker : public SyclKernelFieldHandler {
static constexpr const bool VisitUnionBody = true;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think your problem is that SyclKernelFieldHandler needs this line as well, except =false instead.

I think that results in the union-filtering not actually doing anything.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

think that results in the union-filtering not actually doing anything.
Yes, Thanks Erich.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't find where it is done, that might be the reason why everything is decomposed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, it should be in the base class, not just the other checker. WHich is why the tests are still wrong.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@erichkeane
Copy link
Contributor

erichkeane commented Aug 11, 2020

I NEED us to be able to catch that missed constexpr variable, so please change the visitor to be like this:

https://godbolt.org/z/Tcbv8a

Changes:
-Each of the VisitUnion calls now has the FilteredHandlers type FIRST instead of right at the end in their param lists.
-The call on line 34 has filtered_handlers... moved to be FIRST.
-The call on line 48 has filtered_handlers... AND cur_handler moved to the front.

This will prevent silently missing that the flag is missing.

EDIT: Disregard the printf statements I added in that :) Those were for my own debugging.

@smanna12
Copy link
Contributor Author

smanna12 commented Aug 12, 2020

I tried this simple union test without array. The AST looks like this.

union MyUnion {
int x;
char y;
float cuda;
};

template <typename name, typename Func>
_attribute((sycl_kernel)) void a_kernel(Func kernelFunc) {
kernelFunc();
}

int main() {
MyUnion accel;

a_kernel(
= {
float local = accel.cuda;
});
}

@erichkeane, Are we expecting this AST syntax ?

FunctionDecl 0x55d691256088 <line:26:7, > col:7 _ZTSZ4mainE6kernel 'void (MyUnion, int, char, float)'
|-ParmVarDecl 0x55d6912564b0 <> used arg 'MyUnion'
|-ParmVarDecl 0x55d6912565e0 <> used _arg_x 'int'
|-ParmVarDecl 0x55d6912566d8 <> used _arg_y 'char'
|-ParmVarDecl 0x55d6912567d8 <> used _arg_cuda 'float'
|-CompoundStmt 0x55d691256990 <>
| |-DeclStmt 0x55d691256260 <>
| | -VarDecl 0x55d6912561f8 <<invalid sloc>, col:11> <invalid sloc> used '(lambda at /export/iusers/smanna/myworkws/llvm/clang/test/SemaSYCL/union-kernel-param4.cpp:26:7)' cinit | | -InitListExpr 0x55d691256878 <> '(lambda at /export/iusers/smanna/myworkws/llvm/clang/test/SemaSYCL/union-kernel-param4.cpp:26:7)'
| | |-CXXConstructExpr 0x55d691256550 <> 'MyUnion' 'void (const MyUnion &) noexcept'
| | | -ImplicitCastExpr 0x55d691256538 <<invalid sloc>> 'const MyUnion' lvalue <NoOp> | | | -DeclRefExpr 0x55d691256518 <> 'MyUnion' lvalue ParmVar 0x55d6912564b0 'arg' 'MyUnion'
| | |-ImplicitCastExpr 0x55d691256668 <> 'int'
| | | -DeclRefExpr 0x55d691256648 <<invalid sloc>> 'int' lvalue ParmVar 0x55d6912565e0 '_arg_x' 'int' | | |-ImplicitCastExpr 0x55d691256760 <<invalid sloc>> 'char' <LValueToRValue> | | | -DeclRefExpr 0x55d691256740 <> 'char' lvalue ParmVar 0x55d6912566d8 '_arg_y' 'char'
| | -ImplicitCastExpr 0x55d691256860 <<invalid sloc>> 'float' <LValueToRValue> | | -DeclRefExpr 0x55d691256840 <> 'float' lvalue ParmVar 0x55d6912567d8 '_arg_cuda' 'float'
| `-CompoundStmt 0x55d691256978 <>

@erichkeane
Copy link
Contributor

erichkeane commented Aug 12, 2020

No, arg_x, arg_y, and arg_cuda shouldn't end up in there. For some reason, this is still visiting places it shouldn't. Do you have the latest patch up that someone can take a look at?

I will check with Maria and Elizabeth tomorrow and I will upload latest patch.

Signed-off-by: Soumi Manna <soumi.manna@intel.com>
Signed-off-by: Soumi Manna <soumi.manna@intel.com>
Signed-off-by: Soumi Manna <soumi.manna@intel.com>
Signed-off-by: Soumi Manna <soumi.manna@intel.com>
erichkeane
erichkeane previously approved these changes Aug 14, 2020
Signed-off-by: Soumi Manna <soumi.manna@intel.com>
Signed-off-by: Soumi Manna <soumi.manna@intel.com>
@smanna12
Copy link
Contributor Author

Sorry for the multiple submissions. Clang format took wrong patches. This is fixed now.

againull
againull previously approved these changes Aug 14, 2020
@smanna12 smanna12 requested review from erichkeane and removed request for erichkeane August 14, 2020 21:15
erichkeane
erichkeane previously approved these changes Aug 14, 2020
@smanna12
Copy link
Contributor Author

smanna12 commented Aug 15, 2020

@elizabethandrews , @Fznamznon,, @premanandrao could you please review the support? Thanks.

Copy link
Contributor

@Fznamznon Fznamznon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple of minors in tests, otherwise looks ok

Comment on lines 6 to 8
#include <sycl.hpp>

using namespace cl::sycl;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see usage of this include. Let's remove it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Comment on lines 6 to 8
#include <sycl.hpp>

using namespace cl::sycl;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Signed-off-by: Soumi Manna <soumi.manna@intel.com>
@smanna12 smanna12 dismissed stale reviews from erichkeane and againull via 347b21c August 17, 2020 12:09
@smanna12 smanna12 requested review from Fznamznon and againull August 17, 2020 12:18
@smanna12 smanna12 requested a review from a team August 17, 2020 13:17
@smanna12
Copy link
Contributor Author

smanna12 commented Aug 17, 2020

Runtime test was reviewed and approved in previous commit (db9f49d) by @againull on behalf of intel/llvm-reviewers-runtime . Latest commit is just couple of minor nits in FE tests, no change in runtime test.

@bader , would it be possible to merge this into github today? Thanks!

@smanna12
Copy link
Contributor Author

Thanks everyone for the reviews.

@bader
Copy link
Contributor

bader commented Aug 17, 2020

@bader , would it be possible to merge this into github today? Thanks!

@smanna12, could you add more details to the PR description about this patch, which I can use as commit message?

@smanna12
Copy link
Contributor Author

@bader , would it be possible to merge this into github today? Thanks!

@smanna12, could you add more details to the PR description about this patch, which I can use as commit message?

@bader, I have added PR description. Sorry about this.

@bader bader merged commit 5adfd79 into intel:sycl Aug 17, 2020
jsji pushed a commit that referenced this pull request Jan 11, 2024
Preserve DIExpression in DIGlobalVariableExpression.

Preserving DIExpressions is necessary because of this change in LLVM:

commit 638a839
Author: Michael Buch michaelbuch12@gmail.com
Date: Mon Nov 13 06:04:27 2023 +0000

Reland "[clang][DebugInfo] Emit global variable definitions for static data members with constant initializers" (#71780)

Original commit:
KhronosGroup/SPIRV-LLVM-Translator@9edf714
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants