152 lines · plain
1; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_30 | FileCheck %s --check-prefixes=ALL,SM302; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_60 | FileCheck %s --check-prefixes=ALL,SM603; RUN: %if ptxas %{ llc < %s -mtriple=nvptx64 -mcpu=sm_30 | %ptxas-verify %}4; RUN: %if ptxas-sm_60 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_60 | %ptxas-verify -arch=sm_60 %}5 6; CHECK-LABEL: fadd_double7define void @fadd_double(ptr %0, double %1) {8entry:9 ; SM30: atom.cas.b6410 ; SM60: atom.add.f6411 %2 = atomicrmw fadd ptr %0, double %1 monotonic, align 812 ret void13}14 15; CHECK-LABEL: fadd_float16define void @fadd_float(ptr %0, float %1) {17entry:18 ; ALL: atom.add.f3219 %2 = atomicrmw fadd ptr %0, float %1 monotonic, align 420 ret void21}22 23; CHECK-LABEL: bitwise_i3224define void @bitwise_i32(ptr %0, i32 %1) {25entry:26 ; ALL: atom.and.b3227 %2 = atomicrmw and ptr %0, i32 %1 monotonic, align 428 ; ALL: atom.or.b3229 %3 = atomicrmw or ptr %0, i32 %1 monotonic, align 430 ; ALL: atom.xor.b3231 %4 = atomicrmw xor ptr %0, i32 %1 monotonic, align 432 ; ALL: atom.exch.b3233 %5 = atomicrmw xchg ptr %0, i32 %1 monotonic, align 434 ret void35}36 37; CHECK-LABEL: bitwise_i6438define void @bitwise_i64(ptr %0, i64 %1) {39entry:40 ; SM30: atom.cas.b6441 ; SM60: atom.and.b6442 %2 = atomicrmw and ptr %0, i64 %1 monotonic, align 843 ; SM30: atom.cas.b6444 ; SM60: atom.or.b6445 %3 = atomicrmw or ptr %0, i64 %1 monotonic, align 846 ; SM30: atom.cas.b6447 ; SM60: atom.xor.b6448 %4 = atomicrmw xor ptr %0, i64 %1 monotonic, align 849 ; SM30: atom.cas.b6450 ; SM60: atom.exch.b6451 %5 = atomicrmw xchg ptr %0, i64 %1 monotonic, align 852 ret void53}54 55; CHECK-LABEL: minmax_i3256define void @minmax_i32(ptr %0, i32 %1) {57entry:58 ; ALL: atom.min.s3259 %2 = atomicrmw min ptr %0, i32 %1 monotonic, align 460 ; ALL: atom.max.s3261 %3 = atomicrmw max ptr %0, i32 %1 monotonic, align 462 ; ALL: atom.min.u3263 %4 = atomicrmw umin ptr %0, i32 %1 monotonic, align 464 ; ALL: atom.max.u3265 %5 = atomicrmw umax ptr %0, i32 %1 monotonic, align 466 ret void67}68 69; CHECK-LABEL: minmax_i6470define void @minmax_i64(ptr %0, i64 %1) {71entry:72 ; SM30: atom.cas.b6473 ; SM60: atom.min.s6474 %2 = atomicrmw min ptr %0, i64 %1 monotonic, align 875 ; SM30: atom.cas.b6476 ; SM60: atom.max.s6477 %3 = atomicrmw max ptr %0, i64 %1 monotonic, align 878 ; SM30: atom.cas.b6479 ; SM60: atom.min.u6480 %4 = atomicrmw umin ptr %0, i64 %1 monotonic, align 881 ; SM30: atom.cas.b6482 ; SM60: atom.max.u6483 %5 = atomicrmw umax ptr %0, i64 %1 monotonic, align 884 ret void85}86 87; CHECK-LABEL: bitwise_i888define void @bitwise_i8(ptr %0, i8 %1) {89entry:90 ; ALL: atom.and.b3291 %2 = atomicrmw and ptr %0, i8 %1 monotonic, align 192 ; ALL: atom.or.b3293 %3 = atomicrmw or ptr %0, i8 %1 monotonic, align 194 ; ALL: atom.xor.b3295 %4 = atomicrmw xor ptr %0, i8 %1 monotonic, align 196 ; SM30: atom.cas.b3297 ; SM60: atom.sys.cas.b3298 %5 = atomicrmw xchg ptr %0, i8 %1 monotonic, align 199 ret void100}101 102; CHECK-LABEL: minmax_i8103define void @minmax_i8(ptr %0, i8 %1) {104entry:105 ; SM30: atom.cas.b32106 ; SM60: atom.sys.cas.b32107 %2 = atomicrmw min ptr %0, i8 %1 monotonic, align 1108 ; SM30: atom.cas.b32109 ; SM60: atom.sys.cas.b32110 %3 = atomicrmw max ptr %0, i8 %1 monotonic, align 1111 ; SM30: atom.cas.b32112 ; SM60: atom.sys.cas.b32113 %4 = atomicrmw umin ptr %0, i8 %1 monotonic, align 1114 ; SM30: atom.cas.b32115 ; SM60: atom.sys.cas.b32116 %5 = atomicrmw umax ptr %0, i8 %1 monotonic, align 1117 ret void118}119 120; CHECK-LABEL: bitwise_i16121define void @bitwise_i16(ptr %0, i16 %1) {122entry:123 ; ALL: atom.and.b32124 %2 = atomicrmw and ptr %0, i16 %1 monotonic, align 2125 ; ALL: atom.or.b32126 %3 = atomicrmw or ptr %0, i16 %1 monotonic, align 2127 ; ALL: atom.xor.b32128 %4 = atomicrmw xor ptr %0, i16 %1 monotonic, align 2129 ; SM30: atom.cas.b32130 ; SM60: atom.sys.cas.b32131 %5 = atomicrmw xchg ptr %0, i16 %1 monotonic, align 2132 ret void133}134 135; CHECK-LABEL: minmax_i16136define void @minmax_i16(ptr %0, i16 %1) {137entry:138 ; SM30: atom.cas.b32139 ; SM60: atom.sys.cas.b32140 %2 = atomicrmw min ptr %0, i16 %1 monotonic, align 2141 ; SM30: atom.cas.b32142 ; SM60: atom.sys.cas.b32143 %3 = atomicrmw max ptr %0, i16 %1 monotonic, align 2144 ; SM30: atom.cas.b32145 ; SM60: atom.sys.cas.b32146 %4 = atomicrmw umin ptr %0, i16 %1 monotonic, align 2147 ; SM30: atom.cas.b32148 ; SM60: atom.sys.cas.b32149 %5 = atomicrmw umax ptr %0, i16 %1 monotonic, align 2150 ret void151}152