brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 3e2c157 Raw
134 lines · plain
1; Test 16-bit atomic ANDs.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-SHIFT15; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s -check-prefix=CHECK-SHIFT26 7; Check AND of a variable.8; - CHECK is for the main loop.9; - CHECK-SHIFT1 makes sure that the negated shift count used by the second10;   RLL is set up correctly.  The negation is independent of the NILL and L11;   tested in CHECK.12; - CHECK-SHIFT2 makes sure that %b is shifted into the high part of the word13;   before being used, and that the low bits are set to 1.  This sequence is14;   independent of the other loop prologue instructions.15define i16 @f1(ptr %src, i16 %b) {16; CHECK-LABEL: f1:17; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}}18; CHECK-DAG: sll %r2, 319; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]])20; CHECK: [[LABEL:\.[^:]*]]:21; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2)22; CHECK: nr [[ROT]], %r323; CHECK: rll [[NEW:%r[0-9]+]], [[ROT]], 0({{%r[1-9]+}})24; CHECK: cs [[OLD]], [[NEW]], 0([[RISBG]])25; CHECK: jl [[LABEL]]26; CHECK: rll %r2, [[OLD]], 16(%r2)27; CHECK: br %r1428;29; CHECK-SHIFT1-LABEL: f1:30; CHECK-SHIFT1: sll %r2, 331; CHECK-SHIFT1: lcr [[NEGSHIFT:%r[1-9]+]], %r232; CHECK-SHIFT1: rll33; CHECK-SHIFT1: rll {{%r[0-9]+}}, {{%r[0-9]+}}, 0([[NEGSHIFT]])34; CHECK-SHIFT1: rll35; CHECK-SHIFT1: br %r1436;37; CHECK-SHIFT2-LABEL: f1:38; CHECK-SHIFT2: sll %r3, 1639; CHECK-SHIFT2: oill %r3, 6553540; CHECK-SHIFT2: rll41; CHECK-SHIFT2: nr {{%r[0-9]+}}, %r342; CHECK-SHIFT2: rll43; CHECK-SHIFT2: rll44; CHECK-SHIFT2: br %r1445  %res = atomicrmw and ptr %src, i16 %b seq_cst46  ret i16 %res47}48 49; Check the minimum signed value.  We AND the rotated word with 0x8000ffff.50define i16 @f2(ptr %src) {51; CHECK-LABEL: f2:52; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}}53; CHECK-DAG: sll %r2, 354; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]])55; CHECK: [[LABEL:\.[^:]*]]:56; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2)57; CHECK: nilh [[ROT]], 3276858; CHECK: rll [[NEW:%r[0-9]+]], [[ROT]], 0([[NEGSHIFT:%r[1-9]+]])59; CHECK: cs [[OLD]], [[NEW]], 0([[RISBG]])60; CHECK: jl [[LABEL]]61; CHECK: rll %r2, [[OLD]], 16(%r2)62; CHECK: br %r1463;64; CHECK-SHIFT1-LABEL: f2:65; CHECK-SHIFT1: sll %r2, 366; CHECK-SHIFT1: lcr [[NEGSHIFT:%r[1-9]+]], %r267; CHECK-SHIFT1: rll68; CHECK-SHIFT1: rll {{%r[0-9]+}}, {{%r[0-9]+}}, 0([[NEGSHIFT]])69; CHECK-SHIFT1: rll70; CHECK-SHIFT1: br %r1471;72; CHECK-SHIFT2-LABEL: f2:73; CHECK-SHIFT2: br %r1474  %res = atomicrmw and ptr %src, i16 -32768 seq_cst75  ret i16 %res76}77 78; Check ANDs of -2 (-1 isn't useful).  We AND the rotated word with 0xfffeffff.79define i16 @f3(ptr %src) {80; CHECK-LABEL: f3:81; CHECK: nilh [[ROT]], 6553482; CHECK: br %r1483;84; CHECK-SHIFT1-LABEL: f3:85; CHECK-SHIFT1: br %r1486; CHECK-SHIFT2-LABEL: f3:87; CHECK-SHIFT2: br %r1488  %res = atomicrmw and ptr %src, i16 -2 seq_cst89  ret i16 %res90}91 92; Check ANDs of 1.  We AND the rotated word with 0x0001ffff.93define i16 @f4(ptr %src) {94; CHECK-LABEL: f4:95; CHECK: nilh [[ROT]], 196; CHECK: br %r1497;98; CHECK-SHIFT1-LABEL: f4:99; CHECK-SHIFT1: br %r14100; CHECK-SHIFT2-LABEL: f4:101; CHECK-SHIFT2: br %r14102  %res = atomicrmw and ptr %src, i16 1 seq_cst103  ret i16 %res104}105 106; Check the maximum signed value.  We AND the rotated word with 0x7fffffff.107define i16 @f5(ptr %src) {108; CHECK-LABEL: f5:109; CHECK: nilh [[ROT]], 32767110; CHECK: br %r14111;112; CHECK-SHIFT1-LABEL: f5:113; CHECK-SHIFT1: br %r14114; CHECK-SHIFT2-LABEL: f5:115; CHECK-SHIFT2: br %r14116  %res = atomicrmw and ptr %src, i16 32767 seq_cst117  ret i16 %res118}119 120; Check ANDs of a large unsigned value.  We AND the rotated word with121; 0xfffdffff.122define i16 @f6(ptr %src) {123; CHECK-LABEL: f6:124; CHECK: nilh [[ROT]], 65533125; CHECK: br %r14126;127; CHECK-SHIFT1-LABEL: f6:128; CHECK-SHIFT1: br %r14129; CHECK-SHIFT2-LABEL: f6:130; CHECK-SHIFT2: br %r14131  %res = atomicrmw and ptr %src, i16 65533 seq_cst132  ret i16 %res133}134