{
const char *insns[] = {
"{",
- "\\t" ".reg.b32" "\\t" "%%r_act;",
- "%.\\t" "vote.ballot.b32" "\\t" "%%r_act,1;",
- "\\t" ".reg.pred" "\\t" "%%r_do_abort;",
- "\\t" "mov.pred" "\\t" "%%r_do_abort,0;",
- "%.\\t" "setp.ne.b32" "\\t" "%%r_do_abort,%%r_act,"
- "0xffffffff;",
- "@ %%r_do_abort\\t" "trap;",
- "@ %%r_do_abort\\t" "exit;",
+ "\\t" ".reg.pred" "\\t" "%%r_sync;",
+ "\\t" "mov.pred" "\\t" "%%r_sync, 1;",
+ "%.\\t" "vote.all.pred" "\\t" "%%r_sync, 1;",
+ "@!%%r_sync\\t" "trap;",
+ "@!%%r_sync\\t" "exit;",
"}",
NULL
};
return $res
}
+# Return 1 if code by default compiles for at least PTX ISA version 6.0.
+proc check_effective_target_default_ptx_isa_version_at_least_6_0 { } {
+ return [check_effective_target_default_ptx_isa_version_at_least 6 0]
+}
+
# Return 1 if code with PTX ISA version major.minor or higher can be run.
proc check_effective_target_runtime_ptx_isa_version_at_least { major minor } {
set name runtime_ptx_isa_version_${major}_${minor}
/* { dg-final { scan-assembler-times "@%r\[0-9\]*\tatom.global.cas" 1 } } */
/* { dg-final { scan-assembler-times "shfl.idx.b32" 1 } } */
-/* { dg-final { scan-assembler-times "vote.ballot.b32" 1 } } */
+/* { dg-final { scan-assembler-times "vote.all.pred" 1 } } */
--- /dev/null
+/* Verify that '-muniform-simt' code may be executed single-threaded.
+
+ { dg-do run }
+ { dg-options {-save-temps -O2 -muniform-simt} } */
+
+enum memmodel
+{
+ MEMMODEL_RELAXED = 0
+};
+
+unsigned long long int v64;
+unsigned long long int *p64 = &v64;
+
+int
+main()
+{
+ /* Trigger uniform-SIMT processing. */
+ __atomic_fetch_add (p64, v64, MEMMODEL_RELAXED);
+
+ return 0;
+}
+
+/* Per 'omp_simt_exit':
+ - 'nvptx_warpsync'
+ { dg-final { scan-assembler-times {bar\.warp\.sync\t0xffffffff;} 1 { target default_ptx_isa_version_at_least_6_0 } } }
+ - 'nvptx_uniform_warp_check'
+ { dg-final { scan-assembler-times {vote\.all\.pred\t%r_sync, 1;} 1 { target { ! default_ptx_isa_version_at_least_6_0 } } } }
+*/