283 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s3 4define i1 @loadzext_i8i8(ptr %p) {5; CHECK-LABEL: loadzext_i8i8:6; CHECK: // %bb.0:7; CHECK-NEXT: ldrb w8, [x0]8; CHECK-NEXT: ldrb w9, [x0, #1]9; CHECK-NEXT: orr w8, w8, w910; CHECK-NEXT: cmp w8, #011; CHECK-NEXT: cset w0, eq12; CHECK-NEXT: ret13 %a = load i8, ptr %p14 %q = getelementptr i8, ptr %p, i64 115 %b = load i8, ptr %q16 %az = zext i8 %a to i3217 %bz = zext i8 %b to i3218 %c = or i32 %az, %bz19 %d = icmp eq i32 %c, 020 ret i1 %d21}22 23define i1 @loadzext_c_i8i8(ptr %p) {24; CHECK-LABEL: loadzext_c_i8i8:25; CHECK: // %bb.0:26; CHECK-NEXT: ldrb w8, [x0]27; CHECK-NEXT: ldrb w9, [x0, #1]28; CHECK-NEXT: orr w8, w9, w829; CHECK-NEXT: cmp w8, #030; CHECK-NEXT: cset w0, eq31; CHECK-NEXT: ret32 %a = load i8, ptr %p33 %q = getelementptr i8, ptr %p, i64 134 %b = load i8, ptr %q35 %az = zext i8 %a to i3236 %bz = zext i8 %b to i3237 %c = or i32 %bz, %az38 %d = icmp eq i32 %c, 039 ret i1 %d40}41 42define i1 @load_i8i8_shift(ptr %p) {43; CHECK-LABEL: load_i8i8_shift:44; CHECK: // %bb.0:45; CHECK-NEXT: ldrh w8, [x0]46; CHECK-NEXT: cmp w8, #047; CHECK-NEXT: cset w0, eq48; CHECK-NEXT: ret49 %a = load i8, ptr %p50 %q = getelementptr i8, ptr %p, i64 151 %b = load i8, ptr %q52 %az = zext i8 %a to i3253 %bz = zext i8 %b to i3254 %bs = shl i32 %bz, 855 %c = or i32 %az, %bs56 %d = icmp eq i32 %c, 057 ret i1 %d58}59 60define i1 @loadzext_i8i8i8(ptr %p) {61; CHECK-LABEL: loadzext_i8i8i8:62; CHECK: // %bb.0:63; CHECK-NEXT: ldrb w8, [x0]64; CHECK-NEXT: ldrb w9, [x0, #1]65; CHECK-NEXT: ldrb w10, [x0, #2]66; CHECK-NEXT: orr w8, w8, w967; CHECK-NEXT: orr w8, w8, w1068; CHECK-NEXT: cmp w8, #069; CHECK-NEXT: cset w0, eq70; CHECK-NEXT: ret71 %a = load i8, ptr %p72 %q = getelementptr i8, ptr %p, i64 173 %b = load i8, ptr %q74 %r = getelementptr i8, ptr %p, i64 275 %b2 = load i8, ptr %r76 %az = zext i8 %a to i3277 %bz = zext i8 %b to i3278 %b2z = zext i8 %b2 to i3279 %c = or i32 %az, %bz80 %c2 = or i32 %c, %b2z81 %d = icmp eq i32 %c2, 082 ret i1 %d83}84 85define i1 @loadzext_i8i8i8i8(ptr %p) {86; CHECK-LABEL: loadzext_i8i8i8i8:87; CHECK: // %bb.0:88; CHECK-NEXT: ldrb w8, [x0]89; CHECK-NEXT: ldrb w9, [x0, #1]90; CHECK-NEXT: ldrb w10, [x0, #2]91; CHECK-NEXT: ldrb w11, [x0, #3]92; CHECK-NEXT: orr w8, w8, w993; CHECK-NEXT: orr w9, w10, w1194; CHECK-NEXT: orr w8, w8, w995; CHECK-NEXT: cmp w8, #096; CHECK-NEXT: cset w0, eq97; CHECK-NEXT: ret98 %a = load i8, ptr %p99 %q = getelementptr i8, ptr %p, i64 1100 %b = load i8, ptr %q101 %r = getelementptr i8, ptr %p, i64 2102 %b2 = load i8, ptr %r103 %s = getelementptr i8, ptr %p, i64 3104 %b3 = load i8, ptr %s105 %az = zext i8 %a to i32106 %bz = zext i8 %b to i32107 %b2z = zext i8 %b2 to i32108 %b3z = zext i8 %b3 to i32109 %c = or i32 %az, %bz110 %c2 = or i32 %c, %b2z111 %c3 = or i32 %c2, %b3z112 %d = icmp eq i32 %c3, 0113 ret i1 %d114}115 116define i1 @load_i8i8(ptr %p) {117; CHECK-LABEL: load_i8i8:118; CHECK: // %bb.0:119; CHECK-NEXT: ldrb w8, [x0]120; CHECK-NEXT: ldrb w9, [x0, #1]121; CHECK-NEXT: orr w8, w8, w9122; CHECK-NEXT: cmp w8, #0123; CHECK-NEXT: cset w0, eq124; CHECK-NEXT: ret125 %a = load i8, ptr %p126 %q = getelementptr i8, ptr %p, i64 1127 %b = load i8, ptr %q128 %c = or i8 %a, %b129 %d = icmp eq i8 %c, 0130 ret i1 %d131}132 133define i1 @load_i16i16(ptr %p) {134; CHECK-LABEL: load_i16i16:135; CHECK: // %bb.0:136; CHECK-NEXT: ldrh w8, [x0]137; CHECK-NEXT: ldrh w9, [x0, #2]138; CHECK-NEXT: orr w8, w8, w9139; CHECK-NEXT: cmp w8, #0140; CHECK-NEXT: cset w0, eq141; CHECK-NEXT: ret142 %a = load i16, ptr %p143 %q = getelementptr i8, ptr %p, i64 2144 %b = load i16, ptr %q145 %c = or i16 %a, %b146 %d = icmp eq i16 %c, 0147 ret i1 %d148}149 150define i1 @load_i32i32(ptr %p) {151; CHECK-LABEL: load_i32i32:152; CHECK: // %bb.0:153; CHECK-NEXT: ldp w8, w9, [x0]154; CHECK-NEXT: orr w8, w8, w9155; CHECK-NEXT: cmp w8, #0156; CHECK-NEXT: cset w0, eq157; CHECK-NEXT: ret158 %a = load i32, ptr %p159 %q = getelementptr i8, ptr %p, i64 4160 %b = load i32, ptr %q161 %c = or i32 %a, %b162 %d = icmp eq i32 %c, 0163 ret i1 %d164}165 166define i1 @load_i64i64(ptr %p) {167; CHECK-LABEL: load_i64i64:168; CHECK: // %bb.0:169; CHECK-NEXT: ldp x8, x9, [x0]170; CHECK-NEXT: orr x8, x8, x9171; CHECK-NEXT: cmp x8, #0172; CHECK-NEXT: cset w0, eq173; CHECK-NEXT: ret174 %a = load i64, ptr %p175 %q = getelementptr i8, ptr %p, i64 8176 %b = load i64, ptr %q177 %c = or i64 %a, %b178 %d = icmp eq i64 %c, 0179 ret i1 %d180}181 182define i1 @load_i8i16i8(ptr %p) {183; CHECK-LABEL: load_i8i16i8:184; CHECK: // %bb.0:185; CHECK-NEXT: ldrb w8, [x0]186; CHECK-NEXT: ldrb w9, [x0, #3]187; CHECK-NEXT: ldurh w10, [x0, #1]188; CHECK-NEXT: orr w8, w8, w9189; CHECK-NEXT: orr w8, w8, w10190; CHECK-NEXT: cmp w8, #0191; CHECK-NEXT: cset w0, eq192; CHECK-NEXT: ret193 %l0 = load i8, ptr %p194 %q = getelementptr i8, ptr %p, i64 1195 %l1 = load i16, ptr %q196 %r = getelementptr i8, ptr %p, i64 3197 %l3 = load i8, ptr %r198 %c = or i8 %l0, %l3199 %d = zext i8 %c to i32200 %e = zext i16 %l1 to i32201 %f = or i32 %d, %e202 %g = icmp eq i32 %f, 0203 ret i1 %g204}205 206define i1 @loadzext_i8i8_wrongoff(ptr %p) {207; CHECK-LABEL: loadzext_i8i8_wrongoff:208; CHECK: // %bb.0:209; CHECK-NEXT: ldrb w8, [x0]210; CHECK-NEXT: ldrb w9, [x0, #2]211; CHECK-NEXT: orr w8, w8, w9212; CHECK-NEXT: cmp w8, #0213; CHECK-NEXT: cset w0, eq214; CHECK-NEXT: ret215 %a = load i8, ptr %p216 %q = getelementptr i8, ptr %p, i64 2217 %b = load i8, ptr %q218 %az = zext i8 %a to i32219 %bz = zext i8 %b to i32220 %c = or i32 %az, %bz221 %d = icmp eq i32 %c, 0222 ret i1 %d223}224 225define i1 @loadzext_i16i16_wrongoff(ptr %p) {226; CHECK-LABEL: loadzext_i16i16_wrongoff:227; CHECK: // %bb.0:228; CHECK-NEXT: ldrh w8, [x0]229; CHECK-NEXT: ldurh w9, [x0, #1]230; CHECK-NEXT: orr w8, w8, w9231; CHECK-NEXT: cmp w8, #0232; CHECK-NEXT: cset w0, eq233; CHECK-NEXT: ret234 %a = load i16, ptr %p235 %q = getelementptr i8, ptr %p, i64 1236 %b = load i16, ptr %q237 %az = zext i16 %a to i32238 %bz = zext i16 %b to i32239 %c = or i32 %az, %bz240 %d = icmp eq i32 %c, 0241 ret i1 %d242}243 244define i1 @loadzext_i16i16_store(ptr %p, ptr %q) {245; CHECK-LABEL: loadzext_i16i16_store:246; CHECK: // %bb.0:247; CHECK-NEXT: ldrh w8, [x0]248; CHECK-NEXT: strb wzr, [x1]249; CHECK-NEXT: ldrh w9, [x0, #2]250; CHECK-NEXT: orr w8, w8, w9251; CHECK-NEXT: cmp w8, #0252; CHECK-NEXT: cset w0, eq253; CHECK-NEXT: ret254 %a = load i16, ptr %p255 store i8 0, ptr %q256 %p2 = getelementptr i8, ptr %p, i64 2257 %b = load i16, ptr %p2258 %az = zext i16 %a to i32259 %bz = zext i16 %b to i32260 %c = or i32 %az, %bz261 %d = icmp eq i32 %c, 0262 ret i1 %d263}264 265define i1 @loadzext_i16i16_bases(ptr %p, ptr %q) {266; CHECK-LABEL: loadzext_i16i16_bases:267; CHECK: // %bb.0:268; CHECK-NEXT: ldrh w8, [x0]269; CHECK-NEXT: ldrh w9, [x1, #2]270; CHECK-NEXT: orr w8, w8, w9271; CHECK-NEXT: cmp w8, #0272; CHECK-NEXT: cset w0, eq273; CHECK-NEXT: ret274 %a = load i16, ptr %p275 %p2 = getelementptr i8, ptr %q, i64 2276 %b = load i16, ptr %p2277 %az = zext i16 %a to i32278 %bz = zext i16 %b to i32279 %c = or i32 %az, %bz280 %d = icmp eq i32 %c, 0281 ret i1 %d282}283