Author: arsenm Date: Mon Nov 13 14:40:55 2017 New Revision: 318098 URL: http://llvm.org/viewvc/llvm-project?rev=318098&view=rev Log: OpenCL: Assume inline asm is convergent
Already done for CUDA. Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp cfe/trunk/test/CodeGenOpenCL/convergent.cl Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=318098&r1=318097&r2=318098&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGStmt.cpp (original) +++ cfe/trunk/lib/CodeGen/CGStmt.cpp Mon Nov 13 14:40:55 2017 @@ -2149,10 +2149,11 @@ void CodeGenFunction::EmitAsmStmt(const llvm::ConstantAsMetadata::get(Loc))); } - if (getLangOpts().CUDA && getLangOpts().CUDAIsDevice) { - // Conservatively, mark all inline asm blocks in CUDA as convergent - // (meaning, they may call an intrinsically convergent op, such as bar.sync, - // and so can't have certain optimizations applied around them). + if (getLangOpts().assumeFunctionsAreConvergent()) { + // Conservatively, mark all inline asm blocks in CUDA or OpenCL as + // convergent (meaning, they may call an intrinsically convergent op, such + // as bar.sync, and so can't have certain optimizations applied around + // them). Result->addAttribute(llvm::AttributeList::FunctionIndex, llvm::Attribute::Convergent); } Modified: cfe/trunk/test/CodeGenOpenCL/convergent.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/convergent.cl?rev=318098&r1=318097&r2=318098&view=diff ============================================================================== --- cfe/trunk/test/CodeGenOpenCL/convergent.cl (original) +++ cfe/trunk/test/CodeGenOpenCL/convergent.cl Mon Nov 13 14:40:55 2017 @@ -126,6 +126,13 @@ void test_not_unroll() { // CHECK: declare spir_func void @nodupfun(){{[^#]*}} #[[attr3:[0-9]+]] +// CHECK-LABEL: @assume_convergent_asm +// CHECK: tail call void asm sideeffect "s_barrier", ""() #4 +kernel void assume_convergent_asm() +{ + __asm__ volatile("s_barrier"); +} + // CHECK: attributes #0 = { noinline norecurse nounwind " // CHECK: attributes #1 = { {{[^}]*}}convergent{{[^}]*}} } // CHECK: attributes #2 = { {{[^}]*}}convergent{{[^}]*}} } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits