brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 3e7a61f Raw
139 lines · plain
1; RUN: llc -mattr=avr6 < %s -mtriple=avr | FileCheck %s2 3; CHECK-LABEL: atomic_load164; CHECK:      in r0, 635; CHECK-NEXT: cli6; CHECK-NEXT: ld  [[RR:r[0-9]+]], [[RD:(X|Y|Z)]]7; CHECK-NEXT: ldd [[RR:r[0-9]+]], [[RD]]+18; CHECK-NEXT: out 63, r09define i16 @atomic_load16(ptr %foo) {10  %val = load atomic i16, ptr %foo unordered, align 211  ret i16 %val12}13 14; CHECK-LABEL: atomic_load_swap1615; CHECK: call __sync_lock_test_and_set_216define i16 @atomic_load_swap16(ptr %foo) {17  %val = atomicrmw xchg ptr %foo, i16 13 seq_cst18  ret i16 %val19}20 21; CHECK-LABEL: atomic_load_cmp_swap1622; CHECK: call __sync_val_compare_and_swap_223define i16 @atomic_load_cmp_swap16(ptr %foo) {24  %val = cmpxchg ptr %foo, i16 5, i16 10 acq_rel monotonic25  %value_loaded = extractvalue { i16, i1 } %val, 026  ret i16 %value_loaded27}28 29; CHECK-LABEL: atomic_load_add1630; CHECK:      in r0, 6331; CHECK-NEXT: cli32; CHECK-NEXT: ld [[RDL:r[0-9]+]], [[RR:(X|Y|Z)]]33; CHECK-NEXT: ldd [[RDH:r[0-9]+]], [[RR]]+134; CHECK-NEXT: add [[RR1L:r[0-9]+]], [[RDL]]35; CHECK-NEXT: adc [[RR1H:r[0-9]+]], [[RDH]]36; CHECK-NEXT: std [[RR]]+1, [[RR1H]]37; CHECK-NEXT: st [[RR]], [[RR1L]]38; CHECK-NEXT: out 63, r039define i16 @atomic_load_add16(ptr %foo) {40  %val = atomicrmw add ptr %foo, i16 13 seq_cst41  ret i16 %val42}43 44; CHECK-LABEL: atomic_load_sub1645; CHECK:      in r0, 6346; CHECK-NEXT: cli47; CHECK-NEXT: ld [[RDL:r[0-9]+]], [[RR:(X|Y|Z)]]48; CHECK-NEXT: ldd [[RDH:r[0-9]+]], [[RR]]+149; CHECK-NEXT: movw [[TMPL:r[0-9]+]], [[RDL]]50; CHECK-NEXT: sub [[TMPL]],         [[RR1L:r[0-9]+]]51; CHECK-NEXT: sbc [[TMPH:r[0-9]+]], [[RR1H:r[0-9]+]]52; CHECK-NEXT: std [[RR]]+1, [[TMPH]]53; CHECK-NEXT: st [[RR]], [[TMPL]]54; CHECK-NEXT: out 63, r055define i16 @atomic_load_sub16(ptr %foo) {56  %val = atomicrmw sub ptr %foo, i16 13 seq_cst57  ret i16 %val58}59 60; CHECK-LABEL: atomic_load_and1661; CHECK:      in r0, 6362; CHECK-NEXT: cli63; CHECK-NEXT: ld [[RDL:r[0-9]+]], [[RR:(X|Y|Z)]]64; CHECK-NEXT: ldd [[RDH:r[0-9]+]], [[RR]]+165; CHECK-NEXT: and [[RD1L:r[0-9]+]], [[RDL]]66; CHECK-NEXT: and [[RD1H:r[0-9]+]], [[RDH]]67; CHECK-NEXT: std [[RR]]+1, [[RD1H]]68; CHECK-NEXT: st [[RR]], [[RD1L]]69; CHECK-NEXT: out 63, r070define i16 @atomic_load_and16(ptr %foo) {71  %val = atomicrmw and ptr %foo, i16 13 seq_cst72  ret i16 %val73}74 75; CHECK-LABEL: atomic_load_or1676; CHECK:      in r0, 6377; CHECK-NEXT: cli78; CHECK-NEXT: ld [[RDL:r[0-9]+]], [[RR:(X|Y|Z)]]79; CHECK-NEXT: ldd [[RDH:r[0-9]+]], [[RR]]+180; CHECK-NEXT: or [[RD1L:r[0-9]+]], [[RDL]]81; CHECK-NEXT: or [[RD1H:r[0-9]+]], [[RDH]]82; CHECK-NEXT: std [[RR]]+1, [[RD1H]]83; CHECK-NEXT: st [[RR]], [[RD1L]]84; CHECK-NEXT: out 63, r085define i16 @atomic_load_or16(ptr %foo) {86  %val = atomicrmw or ptr %foo, i16 13 seq_cst87  ret i16 %val88}89 90; CHECK-LABEL: atomic_load_xor1691; CHECK:      in r0, 6392; CHECK-NEXT: cli93; CHECK-NEXT: ld [[RDL:r[0-9]+]], [[RR:(X|Y|Z)]]94; CHECK-NEXT: ldd [[RDH:r[0-9]+]], [[RR]]+195; CHECK-NEXT: eor [[RD1L:r[0-9]+]], [[RDL]]96; CHECK-NEXT: eor [[RD1H:r[0-9]+]], [[RDH]]97; CHECK-NEXT: std [[RR]]+1, [[RD1H]]98; CHECK-NEXT: st [[RR]], [[RD1L]]99; CHECK-NEXT: out 63, r0100define i16 @atomic_load_xor16(ptr %foo) {101  %val = atomicrmw xor ptr %foo, i16 13 seq_cst102  ret i16 %val103}104 105; CHECK-LABEL: atomic_load_nand16106; CHECK: call __sync_fetch_and_nand_2107define i16 @atomic_load_nand16(ptr %foo) {108  %val = atomicrmw nand ptr %foo, i16 13 seq_cst109  ret i16 %val110}111 112; CHECK-LABEL: atomic_load_max16113; CHECK: call __sync_fetch_and_max_2114define i16 @atomic_load_max16(ptr %foo) {115  %val = atomicrmw max ptr %foo, i16 13 seq_cst116  ret i16 %val117}118 119; CHECK-LABEL: atomic_load_min16120; CHECK: call __sync_fetch_and_min_2121define i16 @atomic_load_min16(ptr %foo) {122  %val = atomicrmw min ptr %foo, i16 13 seq_cst123  ret i16 %val124}125 126; CHECK-LABEL: atomic_load_umax16127; CHECK: call __sync_fetch_and_umax_2128define i16 @atomic_load_umax16(ptr %foo) {129  %val = atomicrmw umax ptr %foo, i16 13 seq_cst130  ret i16 %val131}132 133; CHECK-LABEL: atomic_load_umin16134; CHECK: call __sync_fetch_and_umin_2135define i16 @atomic_load_umin16(ptr %foo) {136  %val = atomicrmw umin ptr %foo, i16 13 seq_cst137  ret i16 %val138}139