1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -O2 \ 3; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-ALIGNED,CHECK-ALIGNED-RV32 4; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -O2 \ 5; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-ALIGNED,CHECK-ALIGNED-RV64 6; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zbb -O2 \ 7; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-ALIGNED,CHECK-ALIGNED-RV32-ZBB 8; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zbb -O2 \ 9; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-ALIGNED,CHECK-ALIGNED-RV64-ZBB 10; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zbkb -O2 \ 11; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-ALIGNED,CHECK-ALIGNED-RV32-ZBKB 12; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zbkb -O2 \ 13; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-ALIGNED,CHECK-ALIGNED-RV64-ZBKB 14; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v -O2 \ 15; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-ALIGNED,CHECK-ALIGNED-RV32-V 16; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v -O2 \ 17; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-ALIGNED,CHECK-ALIGNED-RV64-V 18; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+unaligned-scalar-mem -O2 \ 19; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-UNALIGNED,CHECK-UNALIGNED-RV32 20; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+unaligned-scalar-mem -O2 \ 21; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-UNALIGNED,CHECK-UNALIGNED-RV64 22; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zbb,+unaligned-scalar-mem -O2 \ 23; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-UNALIGNED,CHECK-UNALIGNED-RV32-ZBB 24; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zbb,+unaligned-scalar-mem -O2 \ 25; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-UNALIGNED,CHECK-UNALIGNED-RV64-ZBB 26; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zbkb,+unaligned-scalar-mem -O2 \ 27; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-UNALIGNED,CHECK-UNALIGNED-RV32-ZBKB 28; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zbkb,+unaligned-scalar-mem -O2 \ 29; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-UNALIGNED,CHECK-UNALIGNED-RV64-ZBKB 30; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+unaligned-scalar-mem,+unaligned-vector-mem -O2 \ 31; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV32,CHECK-UNALIGNED,CHECK-UNALIGNED-RV32-V 32; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+unaligned-scalar-mem,+unaligned-vector-mem -O2 \ 33; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-RV64,CHECK-UNALIGNED,CHECK-UNALIGNED-RV64-V 34 35declare i32 @bcmp(ptr, ptr, iXLen) nounwind readonly 36declare i32 @memcmp(ptr, ptr, iXLen) nounwind readonly 37 38define i32 @bcmp_size_0(ptr %s1, ptr %s2) nounwind { 39; CHECK-RV32-LABEL: bcmp_size_0: 40; CHECK-RV32: # %bb.0: # %entry 41; CHECK-RV32-NEXT: addi sp, sp, -16 42; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 43; CHECK-RV32-NEXT: li a2, 0 44; CHECK-RV32-NEXT: call bcmp 45; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 46; CHECK-RV32-NEXT: addi sp, sp, 16 47; CHECK-RV32-NEXT: ret 48; 49; CHECK-RV64-LABEL: bcmp_size_0: 50; CHECK-RV64: # %bb.0: # %entry 51; CHECK-RV64-NEXT: addi sp, sp, -16 52; CHECK-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 53; CHECK-RV64-NEXT: li a2, 0 54; CHECK-RV64-NEXT: call bcmp 55; CHECK-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 56; CHECK-RV64-NEXT: addi sp, sp, 16 57; CHECK-RV64-NEXT: ret 58entry: 59 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 0) 60 ret i32 %bcmp 61} 62 63define i32 @bcmp_size_1(ptr %s1, ptr %s2) nounwind { 64; CHECK-ALIGNED-RV32-LABEL: bcmp_size_1: 65; CHECK-ALIGNED-RV32: # %bb.0: # %entry 66; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 67; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 68; CHECK-ALIGNED-RV32-NEXT: li a2, 1 69; CHECK-ALIGNED-RV32-NEXT: call bcmp 70; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 71; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 72; CHECK-ALIGNED-RV32-NEXT: ret 73; 74; CHECK-ALIGNED-RV64-LABEL: bcmp_size_1: 75; CHECK-ALIGNED-RV64: # %bb.0: # %entry 76; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 77; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 78; CHECK-ALIGNED-RV64-NEXT: li a2, 1 79; CHECK-ALIGNED-RV64-NEXT: call bcmp 80; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 81; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 82; CHECK-ALIGNED-RV64-NEXT: ret 83; 84; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_1: 85; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 86; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 87; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 88; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 1 89; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 90; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 91; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 92; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 93; 94; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_1: 95; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 96; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 97; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 98; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 1 99; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 100; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 101; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 102; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 103; 104; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_1: 105; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 106; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 107; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 108; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 1 109; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 110; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 111; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 112; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 113; 114; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_1: 115; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 116; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 117; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 118; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 1 119; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 120; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 121; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 122; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 123; 124; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_1: 125; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 126; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 127; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 128; CHECK-ALIGNED-RV32-V-NEXT: li a2, 1 129; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 130; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 131; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 132; CHECK-ALIGNED-RV32-V-NEXT: ret 133; 134; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_1: 135; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 136; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 137; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 138; CHECK-ALIGNED-RV64-V-NEXT: li a2, 1 139; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 140; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 141; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 142; CHECK-ALIGNED-RV64-V-NEXT: ret 143; 144; CHECK-UNALIGNED-LABEL: bcmp_size_1: 145; CHECK-UNALIGNED: # %bb.0: # %entry 146; CHECK-UNALIGNED-NEXT: lbu a0, 0(a0) 147; CHECK-UNALIGNED-NEXT: lbu a1, 0(a1) 148; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 149; CHECK-UNALIGNED-NEXT: snez a0, a0 150; CHECK-UNALIGNED-NEXT: ret 151entry: 152 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 1) 153 ret i32 %bcmp 154} 155 156define i32 @bcmp_size_2(ptr %s1, ptr %s2) nounwind { 157; CHECK-ALIGNED-RV32-LABEL: bcmp_size_2: 158; CHECK-ALIGNED-RV32: # %bb.0: # %entry 159; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 160; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 161; CHECK-ALIGNED-RV32-NEXT: li a2, 2 162; CHECK-ALIGNED-RV32-NEXT: call bcmp 163; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 164; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 165; CHECK-ALIGNED-RV32-NEXT: ret 166; 167; CHECK-ALIGNED-RV64-LABEL: bcmp_size_2: 168; CHECK-ALIGNED-RV64: # %bb.0: # %entry 169; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 170; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 171; CHECK-ALIGNED-RV64-NEXT: li a2, 2 172; CHECK-ALIGNED-RV64-NEXT: call bcmp 173; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 174; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 175; CHECK-ALIGNED-RV64-NEXT: ret 176; 177; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_2: 178; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 179; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 180; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 181; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 2 182; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 183; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 184; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 185; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 186; 187; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_2: 188; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 189; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 190; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 191; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 2 192; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 193; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 194; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 195; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 196; 197; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_2: 198; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 199; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 200; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 201; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 2 202; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 203; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 204; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 205; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 206; 207; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_2: 208; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 209; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 210; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 211; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 2 212; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 213; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 214; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 215; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 216; 217; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_2: 218; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 219; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 220; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 221; CHECK-ALIGNED-RV32-V-NEXT: li a2, 2 222; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 223; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 224; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 225; CHECK-ALIGNED-RV32-V-NEXT: ret 226; 227; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_2: 228; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 229; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 230; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 231; CHECK-ALIGNED-RV64-V-NEXT: li a2, 2 232; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 233; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 234; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 235; CHECK-ALIGNED-RV64-V-NEXT: ret 236; 237; CHECK-UNALIGNED-LABEL: bcmp_size_2: 238; CHECK-UNALIGNED: # %bb.0: # %entry 239; CHECK-UNALIGNED-NEXT: lhu a0, 0(a0) 240; CHECK-UNALIGNED-NEXT: lhu a1, 0(a1) 241; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 242; CHECK-UNALIGNED-NEXT: snez a0, a0 243; CHECK-UNALIGNED-NEXT: ret 244entry: 245 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 2) 246 ret i32 %bcmp 247} 248 249define i32 @bcmp_size_3(ptr %s1, ptr %s2) nounwind { 250; CHECK-ALIGNED-RV32-LABEL: bcmp_size_3: 251; CHECK-ALIGNED-RV32: # %bb.0: # %entry 252; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 253; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 254; CHECK-ALIGNED-RV32-NEXT: li a2, 3 255; CHECK-ALIGNED-RV32-NEXT: call bcmp 256; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 257; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 258; CHECK-ALIGNED-RV32-NEXT: ret 259; 260; CHECK-ALIGNED-RV64-LABEL: bcmp_size_3: 261; CHECK-ALIGNED-RV64: # %bb.0: # %entry 262; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 263; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 264; CHECK-ALIGNED-RV64-NEXT: li a2, 3 265; CHECK-ALIGNED-RV64-NEXT: call bcmp 266; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 267; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 268; CHECK-ALIGNED-RV64-NEXT: ret 269; 270; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_3: 271; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 272; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 273; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 274; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 3 275; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 276; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 277; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 278; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 279; 280; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_3: 281; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 282; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 283; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 284; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 3 285; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 286; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 287; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 288; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 289; 290; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_3: 291; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 292; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 293; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 294; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 3 295; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 296; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 297; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 298; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 299; 300; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_3: 301; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 302; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 303; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 304; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 3 305; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 306; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 307; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 308; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 309; 310; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_3: 311; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 312; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 313; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 314; CHECK-ALIGNED-RV32-V-NEXT: li a2, 3 315; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 316; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 317; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 318; CHECK-ALIGNED-RV32-V-NEXT: ret 319; 320; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_3: 321; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 322; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 323; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 324; CHECK-ALIGNED-RV64-V-NEXT: li a2, 3 325; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 326; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 327; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 328; CHECK-ALIGNED-RV64-V-NEXT: ret 329; 330; CHECK-UNALIGNED-LABEL: bcmp_size_3: 331; CHECK-UNALIGNED: # %bb.0: # %entry 332; CHECK-UNALIGNED-NEXT: lhu a2, 0(a0) 333; CHECK-UNALIGNED-NEXT: lbu a0, 2(a0) 334; CHECK-UNALIGNED-NEXT: lhu a3, 0(a1) 335; CHECK-UNALIGNED-NEXT: lbu a1, 2(a1) 336; CHECK-UNALIGNED-NEXT: xor a2, a2, a3 337; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 338; CHECK-UNALIGNED-NEXT: or a0, a2, a0 339; CHECK-UNALIGNED-NEXT: snez a0, a0 340; CHECK-UNALIGNED-NEXT: ret 341entry: 342 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 3) 343 ret i32 %bcmp 344} 345 346define i32 @bcmp_size_4(ptr %s1, ptr %s2) nounwind { 347; CHECK-ALIGNED-RV32-LABEL: bcmp_size_4: 348; CHECK-ALIGNED-RV32: # %bb.0: # %entry 349; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 350; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 351; CHECK-ALIGNED-RV32-NEXT: li a2, 4 352; CHECK-ALIGNED-RV32-NEXT: call bcmp 353; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 354; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 355; CHECK-ALIGNED-RV32-NEXT: ret 356; 357; CHECK-ALIGNED-RV64-LABEL: bcmp_size_4: 358; CHECK-ALIGNED-RV64: # %bb.0: # %entry 359; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 360; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 361; CHECK-ALIGNED-RV64-NEXT: li a2, 4 362; CHECK-ALIGNED-RV64-NEXT: call bcmp 363; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 364; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 365; CHECK-ALIGNED-RV64-NEXT: ret 366; 367; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_4: 368; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 369; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 370; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 371; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 372; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 373; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 374; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 375; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 376; 377; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_4: 378; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 379; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 380; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 381; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 382; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 383; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 384; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 385; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 386; 387; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_4: 388; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 389; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 390; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 391; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 392; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 393; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 394; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 395; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 396; 397; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_4: 398; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 399; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 400; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 401; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 402; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 403; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 404; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 405; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 406; 407; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_4: 408; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 409; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 410; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 411; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 412; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 413; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 414; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 415; CHECK-ALIGNED-RV32-V-NEXT: ret 416; 417; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_4: 418; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 419; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 420; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 421; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 422; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 423; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 424; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 425; CHECK-ALIGNED-RV64-V-NEXT: ret 426; 427; CHECK-UNALIGNED-LABEL: bcmp_size_4: 428; CHECK-UNALIGNED: # %bb.0: # %entry 429; CHECK-UNALIGNED-NEXT: lw a0, 0(a0) 430; CHECK-UNALIGNED-NEXT: lw a1, 0(a1) 431; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 432; CHECK-UNALIGNED-NEXT: snez a0, a0 433; CHECK-UNALIGNED-NEXT: ret 434entry: 435 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4) 436 ret i32 %bcmp 437} 438 439define i32 @bcmp_size_5(ptr %s1, ptr %s2) nounwind { 440; CHECK-ALIGNED-RV32-LABEL: bcmp_size_5: 441; CHECK-ALIGNED-RV32: # %bb.0: # %entry 442; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 443; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 444; CHECK-ALIGNED-RV32-NEXT: li a2, 5 445; CHECK-ALIGNED-RV32-NEXT: call bcmp 446; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 447; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 448; CHECK-ALIGNED-RV32-NEXT: ret 449; 450; CHECK-ALIGNED-RV64-LABEL: bcmp_size_5: 451; CHECK-ALIGNED-RV64: # %bb.0: # %entry 452; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 453; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 454; CHECK-ALIGNED-RV64-NEXT: li a2, 5 455; CHECK-ALIGNED-RV64-NEXT: call bcmp 456; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 457; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 458; CHECK-ALIGNED-RV64-NEXT: ret 459; 460; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_5: 461; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 462; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 463; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 464; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 5 465; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 466; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 467; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 468; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 469; 470; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_5: 471; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 472; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 473; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 474; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 5 475; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 476; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 477; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 478; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 479; 480; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_5: 481; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 482; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 483; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 484; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 5 485; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 486; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 487; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 488; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 489; 490; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_5: 491; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 492; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 493; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 494; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 5 495; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 496; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 497; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 498; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 499; 500; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_5: 501; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 502; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 503; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 504; CHECK-ALIGNED-RV32-V-NEXT: li a2, 5 505; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 506; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 507; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 508; CHECK-ALIGNED-RV32-V-NEXT: ret 509; 510; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_5: 511; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 512; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 513; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 514; CHECK-ALIGNED-RV64-V-NEXT: li a2, 5 515; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 516; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 517; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 518; CHECK-ALIGNED-RV64-V-NEXT: ret 519; 520; CHECK-UNALIGNED-LABEL: bcmp_size_5: 521; CHECK-UNALIGNED: # %bb.0: # %entry 522; CHECK-UNALIGNED-NEXT: lw a2, 0(a0) 523; CHECK-UNALIGNED-NEXT: lbu a0, 4(a0) 524; CHECK-UNALIGNED-NEXT: lw a3, 0(a1) 525; CHECK-UNALIGNED-NEXT: lbu a1, 4(a1) 526; CHECK-UNALIGNED-NEXT: xor a2, a2, a3 527; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 528; CHECK-UNALIGNED-NEXT: or a0, a2, a0 529; CHECK-UNALIGNED-NEXT: snez a0, a0 530; CHECK-UNALIGNED-NEXT: ret 531entry: 532 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 5) 533 ret i32 %bcmp 534} 535 536define i32 @bcmp_size_6(ptr %s1, ptr %s2) nounwind { 537; CHECK-ALIGNED-RV32-LABEL: bcmp_size_6: 538; CHECK-ALIGNED-RV32: # %bb.0: # %entry 539; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 540; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 541; CHECK-ALIGNED-RV32-NEXT: li a2, 6 542; CHECK-ALIGNED-RV32-NEXT: call bcmp 543; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 544; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 545; CHECK-ALIGNED-RV32-NEXT: ret 546; 547; CHECK-ALIGNED-RV64-LABEL: bcmp_size_6: 548; CHECK-ALIGNED-RV64: # %bb.0: # %entry 549; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 550; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 551; CHECK-ALIGNED-RV64-NEXT: li a2, 6 552; CHECK-ALIGNED-RV64-NEXT: call bcmp 553; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 554; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 555; CHECK-ALIGNED-RV64-NEXT: ret 556; 557; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_6: 558; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 559; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 560; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 561; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 6 562; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 563; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 564; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 565; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 566; 567; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_6: 568; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 569; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 570; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 571; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 6 572; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 573; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 574; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 575; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 576; 577; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_6: 578; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 579; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 580; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 581; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 6 582; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 583; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 584; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 585; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 586; 587; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_6: 588; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 589; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 590; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 591; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 6 592; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 593; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 594; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 595; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 596; 597; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_6: 598; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 599; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 600; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 601; CHECK-ALIGNED-RV32-V-NEXT: li a2, 6 602; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 603; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 604; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 605; CHECK-ALIGNED-RV32-V-NEXT: ret 606; 607; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_6: 608; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 609; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 610; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 611; CHECK-ALIGNED-RV64-V-NEXT: li a2, 6 612; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 613; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 614; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 615; CHECK-ALIGNED-RV64-V-NEXT: ret 616; 617; CHECK-UNALIGNED-LABEL: bcmp_size_6: 618; CHECK-UNALIGNED: # %bb.0: # %entry 619; CHECK-UNALIGNED-NEXT: lw a2, 0(a0) 620; CHECK-UNALIGNED-NEXT: lhu a0, 4(a0) 621; CHECK-UNALIGNED-NEXT: lw a3, 0(a1) 622; CHECK-UNALIGNED-NEXT: lhu a1, 4(a1) 623; CHECK-UNALIGNED-NEXT: xor a2, a2, a3 624; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 625; CHECK-UNALIGNED-NEXT: or a0, a2, a0 626; CHECK-UNALIGNED-NEXT: snez a0, a0 627; CHECK-UNALIGNED-NEXT: ret 628entry: 629 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 6) 630 ret i32 %bcmp 631} 632 633define i32 @bcmp_size_7(ptr %s1, ptr %s2) nounwind { 634; CHECK-ALIGNED-RV32-LABEL: bcmp_size_7: 635; CHECK-ALIGNED-RV32: # %bb.0: # %entry 636; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 637; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 638; CHECK-ALIGNED-RV32-NEXT: li a2, 7 639; CHECK-ALIGNED-RV32-NEXT: call bcmp 640; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 641; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 642; CHECK-ALIGNED-RV32-NEXT: ret 643; 644; CHECK-ALIGNED-RV64-LABEL: bcmp_size_7: 645; CHECK-ALIGNED-RV64: # %bb.0: # %entry 646; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 647; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 648; CHECK-ALIGNED-RV64-NEXT: li a2, 7 649; CHECK-ALIGNED-RV64-NEXT: call bcmp 650; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 651; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 652; CHECK-ALIGNED-RV64-NEXT: ret 653; 654; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_7: 655; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 656; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 657; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 658; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 7 659; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 660; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 661; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 662; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 663; 664; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_7: 665; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 666; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 667; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 668; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 7 669; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 670; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 671; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 672; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 673; 674; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_7: 675; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 676; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 677; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 678; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 7 679; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 680; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 681; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 682; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 683; 684; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_7: 685; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 686; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 687; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 688; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 7 689; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 690; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 691; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 692; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 693; 694; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_7: 695; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 696; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 697; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 698; CHECK-ALIGNED-RV32-V-NEXT: li a2, 7 699; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 700; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 701; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 702; CHECK-ALIGNED-RV32-V-NEXT: ret 703; 704; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_7: 705; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 706; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 707; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 708; CHECK-ALIGNED-RV64-V-NEXT: li a2, 7 709; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 710; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 711; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 712; CHECK-ALIGNED-RV64-V-NEXT: ret 713; 714; CHECK-UNALIGNED-LABEL: bcmp_size_7: 715; CHECK-UNALIGNED: # %bb.0: # %entry 716; CHECK-UNALIGNED-NEXT: lw a2, 0(a0) 717; CHECK-UNALIGNED-NEXT: lw a0, 3(a0) 718; CHECK-UNALIGNED-NEXT: lw a3, 0(a1) 719; CHECK-UNALIGNED-NEXT: lw a1, 3(a1) 720; CHECK-UNALIGNED-NEXT: xor a2, a2, a3 721; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 722; CHECK-UNALIGNED-NEXT: or a0, a2, a0 723; CHECK-UNALIGNED-NEXT: snez a0, a0 724; CHECK-UNALIGNED-NEXT: ret 725entry: 726 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 7) 727 ret i32 %bcmp 728} 729 730define i32 @bcmp_size_8(ptr %s1, ptr %s2) nounwind { 731; CHECK-ALIGNED-RV32-LABEL: bcmp_size_8: 732; CHECK-ALIGNED-RV32: # %bb.0: # %entry 733; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 734; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 735; CHECK-ALIGNED-RV32-NEXT: li a2, 8 736; CHECK-ALIGNED-RV32-NEXT: call bcmp 737; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 738; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 739; CHECK-ALIGNED-RV32-NEXT: ret 740; 741; CHECK-ALIGNED-RV64-LABEL: bcmp_size_8: 742; CHECK-ALIGNED-RV64: # %bb.0: # %entry 743; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 744; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 745; CHECK-ALIGNED-RV64-NEXT: li a2, 8 746; CHECK-ALIGNED-RV64-NEXT: call bcmp 747; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 748; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 749; CHECK-ALIGNED-RV64-NEXT: ret 750; 751; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_8: 752; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 753; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 754; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 755; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 8 756; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 757; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 758; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 759; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 760; 761; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_8: 762; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 763; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 764; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 765; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 8 766; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 767; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 768; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 769; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 770; 771; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_8: 772; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 773; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 774; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 775; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 8 776; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 777; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 778; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 779; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 780; 781; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_8: 782; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 783; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 784; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 785; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 8 786; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 787; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 788; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 789; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 790; 791; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_8: 792; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 793; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 794; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 795; CHECK-ALIGNED-RV32-V-NEXT: li a2, 8 796; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 797; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 798; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 799; CHECK-ALIGNED-RV32-V-NEXT: ret 800; 801; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_8: 802; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 803; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 804; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 805; CHECK-ALIGNED-RV64-V-NEXT: li a2, 8 806; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 807; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 808; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 809; CHECK-ALIGNED-RV64-V-NEXT: ret 810; 811; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_8: 812; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 813; CHECK-UNALIGNED-RV32-NEXT: lw a2, 0(a0) 814; CHECK-UNALIGNED-RV32-NEXT: lw a0, 4(a0) 815; CHECK-UNALIGNED-RV32-NEXT: lw a3, 0(a1) 816; CHECK-UNALIGNED-RV32-NEXT: lw a1, 4(a1) 817; CHECK-UNALIGNED-RV32-NEXT: xor a2, a2, a3 818; CHECK-UNALIGNED-RV32-NEXT: xor a0, a0, a1 819; CHECK-UNALIGNED-RV32-NEXT: or a0, a2, a0 820; CHECK-UNALIGNED-RV32-NEXT: snez a0, a0 821; CHECK-UNALIGNED-RV32-NEXT: ret 822; 823; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_8: 824; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 825; CHECK-UNALIGNED-RV64-NEXT: ld a0, 0(a0) 826; CHECK-UNALIGNED-RV64-NEXT: ld a1, 0(a1) 827; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1 828; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0 829; CHECK-UNALIGNED-RV64-NEXT: ret 830; 831; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_8: 832; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 833; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 834; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 4(a0) 835; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 836; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 4(a1) 837; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a2, a2, a3 838; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1 839; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a2, a0 840; CHECK-UNALIGNED-RV32-ZBB-NEXT: snez a0, a0 841; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 842; 843; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_8: 844; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 845; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 0(a0) 846; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 0(a1) 847; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1 848; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0 849; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 850; 851; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_8: 852; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 853; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 854; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 4(a0) 855; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 856; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 4(a1) 857; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a2, a2, a3 858; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1 859; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a2, a0 860; CHECK-UNALIGNED-RV32-ZBKB-NEXT: snez a0, a0 861; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 862; 863; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_8: 864; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 865; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 0(a0) 866; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 0(a1) 867; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1 868; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0 869; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 870; 871; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_8: 872; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 873; CHECK-UNALIGNED-RV32-V-NEXT: lw a2, 0(a0) 874; CHECK-UNALIGNED-RV32-V-NEXT: lw a0, 4(a0) 875; CHECK-UNALIGNED-RV32-V-NEXT: lw a3, 0(a1) 876; CHECK-UNALIGNED-RV32-V-NEXT: lw a1, 4(a1) 877; CHECK-UNALIGNED-RV32-V-NEXT: xor a2, a2, a3 878; CHECK-UNALIGNED-RV32-V-NEXT: xor a0, a0, a1 879; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a2, a0 880; CHECK-UNALIGNED-RV32-V-NEXT: snez a0, a0 881; CHECK-UNALIGNED-RV32-V-NEXT: ret 882; 883; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_8: 884; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 885; CHECK-UNALIGNED-RV64-V-NEXT: ld a0, 0(a0) 886; CHECK-UNALIGNED-RV64-V-NEXT: ld a1, 0(a1) 887; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1 888; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0 889; CHECK-UNALIGNED-RV64-V-NEXT: ret 890entry: 891 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 8) 892 ret i32 %bcmp 893} 894 895define i32 @bcmp_size_15(ptr %s1, ptr %s2) nounwind { 896; CHECK-ALIGNED-RV32-LABEL: bcmp_size_15: 897; CHECK-ALIGNED-RV32: # %bb.0: # %entry 898; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 899; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 900; CHECK-ALIGNED-RV32-NEXT: li a2, 15 901; CHECK-ALIGNED-RV32-NEXT: call bcmp 902; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 903; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 904; CHECK-ALIGNED-RV32-NEXT: ret 905; 906; CHECK-ALIGNED-RV64-LABEL: bcmp_size_15: 907; CHECK-ALIGNED-RV64: # %bb.0: # %entry 908; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 909; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 910; CHECK-ALIGNED-RV64-NEXT: li a2, 15 911; CHECK-ALIGNED-RV64-NEXT: call bcmp 912; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 913; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 914; CHECK-ALIGNED-RV64-NEXT: ret 915; 916; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_15: 917; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 918; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 919; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 920; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 15 921; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 922; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 923; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 924; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 925; 926; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_15: 927; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 928; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 929; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 930; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 15 931; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 932; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 933; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 934; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 935; 936; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_15: 937; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 938; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 939; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 940; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 15 941; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 942; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 943; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 944; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 945; 946; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_15: 947; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 948; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 949; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 950; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 15 951; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 952; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 953; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 954; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 955; 956; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_15: 957; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 958; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 959; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 960; CHECK-ALIGNED-RV32-V-NEXT: li a2, 15 961; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 962; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 963; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 964; CHECK-ALIGNED-RV32-V-NEXT: ret 965; 966; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_15: 967; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 968; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 969; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 970; CHECK-ALIGNED-RV64-V-NEXT: li a2, 15 971; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 972; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 973; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 974; CHECK-ALIGNED-RV64-V-NEXT: ret 975; 976; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_15: 977; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 978; CHECK-UNALIGNED-RV32-NEXT: lw a2, 0(a0) 979; CHECK-UNALIGNED-RV32-NEXT: lw a3, 4(a0) 980; CHECK-UNALIGNED-RV32-NEXT: lw a4, 8(a0) 981; CHECK-UNALIGNED-RV32-NEXT: lw a0, 11(a0) 982; CHECK-UNALIGNED-RV32-NEXT: lw a5, 0(a1) 983; CHECK-UNALIGNED-RV32-NEXT: lw a6, 4(a1) 984; CHECK-UNALIGNED-RV32-NEXT: lw a7, 8(a1) 985; CHECK-UNALIGNED-RV32-NEXT: lw a1, 11(a1) 986; CHECK-UNALIGNED-RV32-NEXT: xor a2, a2, a5 987; CHECK-UNALIGNED-RV32-NEXT: xor a3, a3, a6 988; CHECK-UNALIGNED-RV32-NEXT: xor a4, a4, a7 989; CHECK-UNALIGNED-RV32-NEXT: xor a0, a0, a1 990; CHECK-UNALIGNED-RV32-NEXT: or a2, a2, a3 991; CHECK-UNALIGNED-RV32-NEXT: or a0, a4, a0 992; CHECK-UNALIGNED-RV32-NEXT: or a0, a2, a0 993; CHECK-UNALIGNED-RV32-NEXT: snez a0, a0 994; CHECK-UNALIGNED-RV32-NEXT: ret 995; 996; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_15: 997; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 998; CHECK-UNALIGNED-RV64-NEXT: ld a2, 0(a0) 999; CHECK-UNALIGNED-RV64-NEXT: ld a0, 7(a0) 1000; CHECK-UNALIGNED-RV64-NEXT: ld a3, 0(a1) 1001; CHECK-UNALIGNED-RV64-NEXT: ld a1, 7(a1) 1002; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a3 1003; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1 1004; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0 1005; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0 1006; CHECK-UNALIGNED-RV64-NEXT: ret 1007; 1008; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_15: 1009; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 1010; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 1011; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 4(a0) 1012; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a4, 8(a0) 1013; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 11(a0) 1014; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a5, 0(a1) 1015; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a6, 4(a1) 1016; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a7, 8(a1) 1017; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 11(a1) 1018; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a2, a2, a5 1019; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a3, a3, a6 1020; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a4, a4, a7 1021; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1 1022; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a2, a2, a3 1023; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a4, a0 1024; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a2, a0 1025; CHECK-UNALIGNED-RV32-ZBB-NEXT: snez a0, a0 1026; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 1027; 1028; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_15: 1029; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 1030; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 1031; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 7(a0) 1032; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 0(a1) 1033; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 7(a1) 1034; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a3 1035; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1 1036; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0 1037; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0 1038; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 1039; 1040; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_15: 1041; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 1042; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 1043; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 4(a0) 1044; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a4, 8(a0) 1045; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 11(a0) 1046; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a5, 0(a1) 1047; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a6, 4(a1) 1048; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a7, 8(a1) 1049; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 11(a1) 1050; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a2, a2, a5 1051; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a3, a3, a6 1052; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a4, a4, a7 1053; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1 1054; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a2, a2, a3 1055; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a4, a0 1056; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a2, a0 1057; CHECK-UNALIGNED-RV32-ZBKB-NEXT: snez a0, a0 1058; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 1059; 1060; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_15: 1061; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 1062; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 1063; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 7(a0) 1064; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 0(a1) 1065; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 7(a1) 1066; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a3 1067; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1 1068; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0 1069; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0 1070; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 1071; 1072; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_15: 1073; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 1074; CHECK-UNALIGNED-RV32-V-NEXT: lw a2, 0(a0) 1075; CHECK-UNALIGNED-RV32-V-NEXT: lw a3, 4(a0) 1076; CHECK-UNALIGNED-RV32-V-NEXT: lw a4, 8(a0) 1077; CHECK-UNALIGNED-RV32-V-NEXT: lw a0, 11(a0) 1078; CHECK-UNALIGNED-RV32-V-NEXT: lw a5, 0(a1) 1079; CHECK-UNALIGNED-RV32-V-NEXT: lw a6, 4(a1) 1080; CHECK-UNALIGNED-RV32-V-NEXT: lw a7, 8(a1) 1081; CHECK-UNALIGNED-RV32-V-NEXT: lw a1, 11(a1) 1082; CHECK-UNALIGNED-RV32-V-NEXT: xor a2, a2, a5 1083; CHECK-UNALIGNED-RV32-V-NEXT: xor a3, a3, a6 1084; CHECK-UNALIGNED-RV32-V-NEXT: xor a4, a4, a7 1085; CHECK-UNALIGNED-RV32-V-NEXT: xor a0, a0, a1 1086; CHECK-UNALIGNED-RV32-V-NEXT: or a2, a2, a3 1087; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a4, a0 1088; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a2, a0 1089; CHECK-UNALIGNED-RV32-V-NEXT: snez a0, a0 1090; CHECK-UNALIGNED-RV32-V-NEXT: ret 1091; 1092; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_15: 1093; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 1094; CHECK-UNALIGNED-RV64-V-NEXT: ld a2, 0(a0) 1095; CHECK-UNALIGNED-RV64-V-NEXT: ld a0, 7(a0) 1096; CHECK-UNALIGNED-RV64-V-NEXT: ld a3, 0(a1) 1097; CHECK-UNALIGNED-RV64-V-NEXT: ld a1, 7(a1) 1098; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a3 1099; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1 1100; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0 1101; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0 1102; CHECK-UNALIGNED-RV64-V-NEXT: ret 1103entry: 1104 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 15) 1105 ret i32 %bcmp 1106} 1107 1108define i32 @bcmp_size_16(ptr %s1, ptr %s2) nounwind { 1109; CHECK-ALIGNED-RV32-LABEL: bcmp_size_16: 1110; CHECK-ALIGNED-RV32: # %bb.0: # %entry 1111; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 1112; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1113; CHECK-ALIGNED-RV32-NEXT: li a2, 16 1114; CHECK-ALIGNED-RV32-NEXT: call bcmp 1115; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1116; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 1117; CHECK-ALIGNED-RV32-NEXT: ret 1118; 1119; CHECK-ALIGNED-RV64-LABEL: bcmp_size_16: 1120; CHECK-ALIGNED-RV64: # %bb.0: # %entry 1121; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 1122; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1123; CHECK-ALIGNED-RV64-NEXT: li a2, 16 1124; CHECK-ALIGNED-RV64-NEXT: call bcmp 1125; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1126; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 1127; CHECK-ALIGNED-RV64-NEXT: ret 1128; 1129; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_16: 1130; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 1131; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 1132; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1133; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 16 1134; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 1135; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1136; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 1137; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 1138; 1139; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_16: 1140; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 1141; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 1142; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1143; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 16 1144; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 1145; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1146; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 1147; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 1148; 1149; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_16: 1150; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 1151; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 1152; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1153; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 16 1154; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 1155; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1156; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 1157; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 1158; 1159; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_16: 1160; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 1161; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 1162; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1163; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 16 1164; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 1165; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1166; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 1167; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 1168; 1169; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_16: 1170; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 1171; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 1172; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1173; CHECK-ALIGNED-RV32-V-NEXT: li a2, 16 1174; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 1175; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1176; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 1177; CHECK-ALIGNED-RV32-V-NEXT: ret 1178; 1179; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_16: 1180; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 1181; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 1182; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1183; CHECK-ALIGNED-RV64-V-NEXT: li a2, 16 1184; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 1185; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1186; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 1187; CHECK-ALIGNED-RV64-V-NEXT: ret 1188; 1189; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_16: 1190; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 1191; CHECK-UNALIGNED-RV32-NEXT: lw a2, 0(a0) 1192; CHECK-UNALIGNED-RV32-NEXT: lw a3, 4(a0) 1193; CHECK-UNALIGNED-RV32-NEXT: lw a4, 8(a0) 1194; CHECK-UNALIGNED-RV32-NEXT: lw a0, 12(a0) 1195; CHECK-UNALIGNED-RV32-NEXT: lw a5, 0(a1) 1196; CHECK-UNALIGNED-RV32-NEXT: lw a6, 4(a1) 1197; CHECK-UNALIGNED-RV32-NEXT: lw a7, 8(a1) 1198; CHECK-UNALIGNED-RV32-NEXT: lw a1, 12(a1) 1199; CHECK-UNALIGNED-RV32-NEXT: xor a2, a2, a5 1200; CHECK-UNALIGNED-RV32-NEXT: xor a3, a3, a6 1201; CHECK-UNALIGNED-RV32-NEXT: xor a4, a4, a7 1202; CHECK-UNALIGNED-RV32-NEXT: xor a0, a0, a1 1203; CHECK-UNALIGNED-RV32-NEXT: or a2, a2, a3 1204; CHECK-UNALIGNED-RV32-NEXT: or a0, a4, a0 1205; CHECK-UNALIGNED-RV32-NEXT: or a0, a2, a0 1206; CHECK-UNALIGNED-RV32-NEXT: snez a0, a0 1207; CHECK-UNALIGNED-RV32-NEXT: ret 1208; 1209; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_16: 1210; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 1211; CHECK-UNALIGNED-RV64-NEXT: ld a2, 0(a0) 1212; CHECK-UNALIGNED-RV64-NEXT: ld a0, 8(a0) 1213; CHECK-UNALIGNED-RV64-NEXT: ld a3, 0(a1) 1214; CHECK-UNALIGNED-RV64-NEXT: ld a1, 8(a1) 1215; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a3 1216; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1 1217; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0 1218; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0 1219; CHECK-UNALIGNED-RV64-NEXT: ret 1220; 1221; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_16: 1222; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 1223; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 1224; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 4(a0) 1225; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a4, 8(a0) 1226; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 12(a0) 1227; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a5, 0(a1) 1228; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a6, 4(a1) 1229; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a7, 8(a1) 1230; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 12(a1) 1231; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a2, a2, a5 1232; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a3, a3, a6 1233; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a4, a4, a7 1234; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1 1235; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a2, a2, a3 1236; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a4, a0 1237; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a2, a0 1238; CHECK-UNALIGNED-RV32-ZBB-NEXT: snez a0, a0 1239; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 1240; 1241; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_16: 1242; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 1243; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 1244; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 8(a0) 1245; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 0(a1) 1246; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 8(a1) 1247; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a3 1248; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1 1249; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0 1250; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0 1251; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 1252; 1253; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_16: 1254; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 1255; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 1256; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 4(a0) 1257; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a4, 8(a0) 1258; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 12(a0) 1259; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a5, 0(a1) 1260; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a6, 4(a1) 1261; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a7, 8(a1) 1262; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 12(a1) 1263; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a2, a2, a5 1264; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a3, a3, a6 1265; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a4, a4, a7 1266; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1 1267; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a2, a2, a3 1268; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a4, a0 1269; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a2, a0 1270; CHECK-UNALIGNED-RV32-ZBKB-NEXT: snez a0, a0 1271; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 1272; 1273; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_16: 1274; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 1275; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 1276; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 8(a0) 1277; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 0(a1) 1278; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 8(a1) 1279; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a3 1280; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1 1281; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0 1282; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0 1283; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 1284; 1285; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_16: 1286; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 1287; CHECK-UNALIGNED-RV32-V-NEXT: lw a2, 0(a0) 1288; CHECK-UNALIGNED-RV32-V-NEXT: lw a3, 4(a0) 1289; CHECK-UNALIGNED-RV32-V-NEXT: lw a4, 8(a0) 1290; CHECK-UNALIGNED-RV32-V-NEXT: lw a0, 12(a0) 1291; CHECK-UNALIGNED-RV32-V-NEXT: lw a5, 0(a1) 1292; CHECK-UNALIGNED-RV32-V-NEXT: lw a6, 4(a1) 1293; CHECK-UNALIGNED-RV32-V-NEXT: lw a7, 8(a1) 1294; CHECK-UNALIGNED-RV32-V-NEXT: lw a1, 12(a1) 1295; CHECK-UNALIGNED-RV32-V-NEXT: xor a2, a2, a5 1296; CHECK-UNALIGNED-RV32-V-NEXT: xor a3, a3, a6 1297; CHECK-UNALIGNED-RV32-V-NEXT: xor a4, a4, a7 1298; CHECK-UNALIGNED-RV32-V-NEXT: xor a0, a0, a1 1299; CHECK-UNALIGNED-RV32-V-NEXT: or a2, a2, a3 1300; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a4, a0 1301; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a2, a0 1302; CHECK-UNALIGNED-RV32-V-NEXT: snez a0, a0 1303; CHECK-UNALIGNED-RV32-V-NEXT: ret 1304; 1305; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_16: 1306; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 1307; CHECK-UNALIGNED-RV64-V-NEXT: ld a2, 0(a0) 1308; CHECK-UNALIGNED-RV64-V-NEXT: ld a0, 8(a0) 1309; CHECK-UNALIGNED-RV64-V-NEXT: ld a3, 0(a1) 1310; CHECK-UNALIGNED-RV64-V-NEXT: ld a1, 8(a1) 1311; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a3 1312; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1 1313; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0 1314; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0 1315; CHECK-UNALIGNED-RV64-V-NEXT: ret 1316entry: 1317 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 16) 1318 ret i32 %bcmp 1319} 1320 1321define i32 @bcmp_size_31(ptr %s1, ptr %s2) nounwind { 1322; CHECK-ALIGNED-RV32-LABEL: bcmp_size_31: 1323; CHECK-ALIGNED-RV32: # %bb.0: # %entry 1324; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 1325; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1326; CHECK-ALIGNED-RV32-NEXT: li a2, 31 1327; CHECK-ALIGNED-RV32-NEXT: call bcmp 1328; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1329; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 1330; CHECK-ALIGNED-RV32-NEXT: ret 1331; 1332; CHECK-ALIGNED-RV64-LABEL: bcmp_size_31: 1333; CHECK-ALIGNED-RV64: # %bb.0: # %entry 1334; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 1335; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1336; CHECK-ALIGNED-RV64-NEXT: li a2, 31 1337; CHECK-ALIGNED-RV64-NEXT: call bcmp 1338; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1339; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 1340; CHECK-ALIGNED-RV64-NEXT: ret 1341; 1342; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_31: 1343; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 1344; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 1345; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1346; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 31 1347; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 1348; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1349; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 1350; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 1351; 1352; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_31: 1353; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 1354; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 1355; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1356; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 31 1357; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 1358; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1359; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 1360; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 1361; 1362; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_31: 1363; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 1364; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 1365; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1366; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 31 1367; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 1368; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1369; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 1370; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 1371; 1372; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_31: 1373; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 1374; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 1375; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1376; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 31 1377; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 1378; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1379; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 1380; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 1381; 1382; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_31: 1383; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 1384; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 1385; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1386; CHECK-ALIGNED-RV32-V-NEXT: li a2, 31 1387; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 1388; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1389; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 1390; CHECK-ALIGNED-RV32-V-NEXT: ret 1391; 1392; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_31: 1393; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 1394; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 1395; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1396; CHECK-ALIGNED-RV64-V-NEXT: li a2, 31 1397; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 1398; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1399; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 1400; CHECK-ALIGNED-RV64-V-NEXT: ret 1401; 1402; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_31: 1403; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 1404; CHECK-UNALIGNED-RV32-NEXT: lw a2, 0(a0) 1405; CHECK-UNALIGNED-RV32-NEXT: lw a3, 4(a0) 1406; CHECK-UNALIGNED-RV32-NEXT: lw a4, 8(a0) 1407; CHECK-UNALIGNED-RV32-NEXT: lw a5, 12(a0) 1408; CHECK-UNALIGNED-RV32-NEXT: lw a6, 0(a1) 1409; CHECK-UNALIGNED-RV32-NEXT: lw a7, 4(a1) 1410; CHECK-UNALIGNED-RV32-NEXT: lw t0, 8(a1) 1411; CHECK-UNALIGNED-RV32-NEXT: lw t1, 12(a1) 1412; CHECK-UNALIGNED-RV32-NEXT: xor a2, a2, a6 1413; CHECK-UNALIGNED-RV32-NEXT: lw a6, 16(a0) 1414; CHECK-UNALIGNED-RV32-NEXT: lw t2, 20(a0) 1415; CHECK-UNALIGNED-RV32-NEXT: lw t3, 24(a0) 1416; CHECK-UNALIGNED-RV32-NEXT: lw a0, 27(a0) 1417; CHECK-UNALIGNED-RV32-NEXT: xor a3, a3, a7 1418; CHECK-UNALIGNED-RV32-NEXT: xor a4, a4, t0 1419; CHECK-UNALIGNED-RV32-NEXT: xor a5, a5, t1 1420; CHECK-UNALIGNED-RV32-NEXT: lw a7, 16(a1) 1421; CHECK-UNALIGNED-RV32-NEXT: lw t0, 20(a1) 1422; CHECK-UNALIGNED-RV32-NEXT: lw t1, 24(a1) 1423; CHECK-UNALIGNED-RV32-NEXT: lw a1, 27(a1) 1424; CHECK-UNALIGNED-RV32-NEXT: xor a6, a6, a7 1425; CHECK-UNALIGNED-RV32-NEXT: xor a7, t2, t0 1426; CHECK-UNALIGNED-RV32-NEXT: xor t0, t3, t1 1427; CHECK-UNALIGNED-RV32-NEXT: xor a0, a0, a1 1428; CHECK-UNALIGNED-RV32-NEXT: or a2, a2, a3 1429; CHECK-UNALIGNED-RV32-NEXT: or a4, a4, a5 1430; CHECK-UNALIGNED-RV32-NEXT: or a1, a6, a7 1431; CHECK-UNALIGNED-RV32-NEXT: or a0, t0, a0 1432; CHECK-UNALIGNED-RV32-NEXT: or a2, a2, a4 1433; CHECK-UNALIGNED-RV32-NEXT: or a0, a1, a0 1434; CHECK-UNALIGNED-RV32-NEXT: or a0, a2, a0 1435; CHECK-UNALIGNED-RV32-NEXT: snez a0, a0 1436; CHECK-UNALIGNED-RV32-NEXT: ret 1437; 1438; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_31: 1439; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 1440; CHECK-UNALIGNED-RV64-NEXT: ld a2, 0(a0) 1441; CHECK-UNALIGNED-RV64-NEXT: ld a3, 8(a0) 1442; CHECK-UNALIGNED-RV64-NEXT: ld a4, 16(a0) 1443; CHECK-UNALIGNED-RV64-NEXT: ld a0, 23(a0) 1444; CHECK-UNALIGNED-RV64-NEXT: ld a5, 0(a1) 1445; CHECK-UNALIGNED-RV64-NEXT: ld a6, 8(a1) 1446; CHECK-UNALIGNED-RV64-NEXT: ld a7, 16(a1) 1447; CHECK-UNALIGNED-RV64-NEXT: ld a1, 23(a1) 1448; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a5 1449; CHECK-UNALIGNED-RV64-NEXT: xor a3, a3, a6 1450; CHECK-UNALIGNED-RV64-NEXT: xor a4, a4, a7 1451; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1 1452; CHECK-UNALIGNED-RV64-NEXT: or a2, a2, a3 1453; CHECK-UNALIGNED-RV64-NEXT: or a0, a4, a0 1454; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0 1455; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0 1456; CHECK-UNALIGNED-RV64-NEXT: ret 1457; 1458; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_31: 1459; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 1460; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 1461; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 4(a0) 1462; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a4, 8(a0) 1463; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a5, 12(a0) 1464; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a6, 0(a1) 1465; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a7, 4(a1) 1466; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t0, 8(a1) 1467; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t1, 12(a1) 1468; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a2, a2, a6 1469; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a6, 16(a0) 1470; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t2, 20(a0) 1471; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t3, 24(a0) 1472; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 27(a0) 1473; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a3, a3, a7 1474; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a4, a4, t0 1475; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a5, a5, t1 1476; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a7, 16(a1) 1477; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t0, 20(a1) 1478; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t1, 24(a1) 1479; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 27(a1) 1480; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a6, a6, a7 1481; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a7, t2, t0 1482; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor t0, t3, t1 1483; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1 1484; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a2, a2, a3 1485; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a4, a4, a5 1486; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a1, a6, a7 1487; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, t0, a0 1488; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a2, a2, a4 1489; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a1, a0 1490; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a2, a0 1491; CHECK-UNALIGNED-RV32-ZBB-NEXT: snez a0, a0 1492; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 1493; 1494; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_31: 1495; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 1496; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 1497; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 8(a0) 1498; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a4, 16(a0) 1499; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 23(a0) 1500; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a5, 0(a1) 1501; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a6, 8(a1) 1502; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a7, 16(a1) 1503; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 23(a1) 1504; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a5 1505; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a3, a3, a6 1506; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a4, a4, a7 1507; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1 1508; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a2, a2, a3 1509; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a4, a0 1510; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0 1511; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0 1512; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 1513; 1514; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_31: 1515; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 1516; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 1517; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 4(a0) 1518; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a4, 8(a0) 1519; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a5, 12(a0) 1520; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a6, 0(a1) 1521; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a7, 4(a1) 1522; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t0, 8(a1) 1523; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t1, 12(a1) 1524; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a2, a2, a6 1525; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a6, 16(a0) 1526; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t2, 20(a0) 1527; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t3, 24(a0) 1528; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 27(a0) 1529; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a3, a3, a7 1530; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a4, a4, t0 1531; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a5, a5, t1 1532; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a7, 16(a1) 1533; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t0, 20(a1) 1534; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t1, 24(a1) 1535; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 27(a1) 1536; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a6, a6, a7 1537; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a7, t2, t0 1538; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor t0, t3, t1 1539; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1 1540; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a2, a2, a3 1541; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a4, a4, a5 1542; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a1, a6, a7 1543; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, t0, a0 1544; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a2, a2, a4 1545; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a1, a0 1546; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a2, a0 1547; CHECK-UNALIGNED-RV32-ZBKB-NEXT: snez a0, a0 1548; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 1549; 1550; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_31: 1551; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 1552; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 1553; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 8(a0) 1554; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a4, 16(a0) 1555; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 23(a0) 1556; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a5, 0(a1) 1557; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a6, 8(a1) 1558; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a7, 16(a1) 1559; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 23(a1) 1560; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a5 1561; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a3, a3, a6 1562; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a4, a4, a7 1563; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1 1564; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a2, a2, a3 1565; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a4, a0 1566; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0 1567; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0 1568; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 1569; 1570; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_31: 1571; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 1572; CHECK-UNALIGNED-RV32-V-NEXT: lw a2, 0(a0) 1573; CHECK-UNALIGNED-RV32-V-NEXT: lw a3, 4(a0) 1574; CHECK-UNALIGNED-RV32-V-NEXT: lw a4, 8(a0) 1575; CHECK-UNALIGNED-RV32-V-NEXT: lw a5, 12(a0) 1576; CHECK-UNALIGNED-RV32-V-NEXT: lw a6, 0(a1) 1577; CHECK-UNALIGNED-RV32-V-NEXT: lw a7, 4(a1) 1578; CHECK-UNALIGNED-RV32-V-NEXT: lw t0, 8(a1) 1579; CHECK-UNALIGNED-RV32-V-NEXT: lw t1, 12(a1) 1580; CHECK-UNALIGNED-RV32-V-NEXT: xor a2, a2, a6 1581; CHECK-UNALIGNED-RV32-V-NEXT: lw a6, 16(a0) 1582; CHECK-UNALIGNED-RV32-V-NEXT: lw t2, 20(a0) 1583; CHECK-UNALIGNED-RV32-V-NEXT: lw t3, 24(a0) 1584; CHECK-UNALIGNED-RV32-V-NEXT: lw a0, 27(a0) 1585; CHECK-UNALIGNED-RV32-V-NEXT: xor a3, a3, a7 1586; CHECK-UNALIGNED-RV32-V-NEXT: xor a4, a4, t0 1587; CHECK-UNALIGNED-RV32-V-NEXT: xor a5, a5, t1 1588; CHECK-UNALIGNED-RV32-V-NEXT: lw a7, 16(a1) 1589; CHECK-UNALIGNED-RV32-V-NEXT: lw t0, 20(a1) 1590; CHECK-UNALIGNED-RV32-V-NEXT: lw t1, 24(a1) 1591; CHECK-UNALIGNED-RV32-V-NEXT: lw a1, 27(a1) 1592; CHECK-UNALIGNED-RV32-V-NEXT: xor a6, a6, a7 1593; CHECK-UNALIGNED-RV32-V-NEXT: xor a7, t2, t0 1594; CHECK-UNALIGNED-RV32-V-NEXT: xor t0, t3, t1 1595; CHECK-UNALIGNED-RV32-V-NEXT: xor a0, a0, a1 1596; CHECK-UNALIGNED-RV32-V-NEXT: or a2, a2, a3 1597; CHECK-UNALIGNED-RV32-V-NEXT: or a4, a4, a5 1598; CHECK-UNALIGNED-RV32-V-NEXT: or a1, a6, a7 1599; CHECK-UNALIGNED-RV32-V-NEXT: or a0, t0, a0 1600; CHECK-UNALIGNED-RV32-V-NEXT: or a2, a2, a4 1601; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a1, a0 1602; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a2, a0 1603; CHECK-UNALIGNED-RV32-V-NEXT: snez a0, a0 1604; CHECK-UNALIGNED-RV32-V-NEXT: ret 1605; 1606; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_31: 1607; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 1608; CHECK-UNALIGNED-RV64-V-NEXT: ld a2, 0(a0) 1609; CHECK-UNALIGNED-RV64-V-NEXT: ld a3, 8(a0) 1610; CHECK-UNALIGNED-RV64-V-NEXT: ld a4, 16(a0) 1611; CHECK-UNALIGNED-RV64-V-NEXT: ld a0, 23(a0) 1612; CHECK-UNALIGNED-RV64-V-NEXT: ld a5, 0(a1) 1613; CHECK-UNALIGNED-RV64-V-NEXT: ld a6, 8(a1) 1614; CHECK-UNALIGNED-RV64-V-NEXT: ld a7, 16(a1) 1615; CHECK-UNALIGNED-RV64-V-NEXT: ld a1, 23(a1) 1616; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a5 1617; CHECK-UNALIGNED-RV64-V-NEXT: xor a3, a3, a6 1618; CHECK-UNALIGNED-RV64-V-NEXT: xor a4, a4, a7 1619; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1 1620; CHECK-UNALIGNED-RV64-V-NEXT: or a2, a2, a3 1621; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a4, a0 1622; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0 1623; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0 1624; CHECK-UNALIGNED-RV64-V-NEXT: ret 1625entry: 1626 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 31) 1627 ret i32 %bcmp 1628} 1629 1630define i32 @bcmp_size_32(ptr %s1, ptr %s2) nounwind { 1631; CHECK-ALIGNED-RV32-LABEL: bcmp_size_32: 1632; CHECK-ALIGNED-RV32: # %bb.0: # %entry 1633; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 1634; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1635; CHECK-ALIGNED-RV32-NEXT: li a2, 32 1636; CHECK-ALIGNED-RV32-NEXT: call bcmp 1637; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1638; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 1639; CHECK-ALIGNED-RV32-NEXT: ret 1640; 1641; CHECK-ALIGNED-RV64-LABEL: bcmp_size_32: 1642; CHECK-ALIGNED-RV64: # %bb.0: # %entry 1643; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 1644; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1645; CHECK-ALIGNED-RV64-NEXT: li a2, 32 1646; CHECK-ALIGNED-RV64-NEXT: call bcmp 1647; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1648; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 1649; CHECK-ALIGNED-RV64-NEXT: ret 1650; 1651; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_size_32: 1652; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 1653; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 1654; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1655; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 32 1656; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 1657; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1658; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 1659; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 1660; 1661; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_32: 1662; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 1663; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 1664; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1665; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 32 1666; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 1667; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1668; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 1669; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 1670; 1671; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_size_32: 1672; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 1673; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 1674; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1675; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 32 1676; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 1677; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1678; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 1679; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 1680; 1681; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_32: 1682; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 1683; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 1684; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1685; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 32 1686; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 1687; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1688; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 1689; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 1690; 1691; CHECK-ALIGNED-RV32-V-LABEL: bcmp_size_32: 1692; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 1693; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 1694; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1695; CHECK-ALIGNED-RV32-V-NEXT: li a2, 32 1696; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 1697; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1698; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 1699; CHECK-ALIGNED-RV32-V-NEXT: ret 1700; 1701; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_32: 1702; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 1703; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 1704; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1705; CHECK-ALIGNED-RV64-V-NEXT: li a2, 32 1706; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 1707; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1708; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 1709; CHECK-ALIGNED-RV64-V-NEXT: ret 1710; 1711; CHECK-UNALIGNED-RV32-LABEL: bcmp_size_32: 1712; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 1713; CHECK-UNALIGNED-RV32-NEXT: lw a2, 0(a0) 1714; CHECK-UNALIGNED-RV32-NEXT: lw a3, 4(a0) 1715; CHECK-UNALIGNED-RV32-NEXT: lw a4, 8(a0) 1716; CHECK-UNALIGNED-RV32-NEXT: lw a5, 12(a0) 1717; CHECK-UNALIGNED-RV32-NEXT: lw a6, 0(a1) 1718; CHECK-UNALIGNED-RV32-NEXT: lw a7, 4(a1) 1719; CHECK-UNALIGNED-RV32-NEXT: lw t0, 8(a1) 1720; CHECK-UNALIGNED-RV32-NEXT: lw t1, 12(a1) 1721; CHECK-UNALIGNED-RV32-NEXT: xor a2, a2, a6 1722; CHECK-UNALIGNED-RV32-NEXT: lw a6, 16(a0) 1723; CHECK-UNALIGNED-RV32-NEXT: lw t2, 20(a0) 1724; CHECK-UNALIGNED-RV32-NEXT: lw t3, 24(a0) 1725; CHECK-UNALIGNED-RV32-NEXT: lw a0, 28(a0) 1726; CHECK-UNALIGNED-RV32-NEXT: xor a3, a3, a7 1727; CHECK-UNALIGNED-RV32-NEXT: xor a4, a4, t0 1728; CHECK-UNALIGNED-RV32-NEXT: xor a5, a5, t1 1729; CHECK-UNALIGNED-RV32-NEXT: lw a7, 16(a1) 1730; CHECK-UNALIGNED-RV32-NEXT: lw t0, 20(a1) 1731; CHECK-UNALIGNED-RV32-NEXT: lw t1, 24(a1) 1732; CHECK-UNALIGNED-RV32-NEXT: lw a1, 28(a1) 1733; CHECK-UNALIGNED-RV32-NEXT: xor a6, a6, a7 1734; CHECK-UNALIGNED-RV32-NEXT: xor a7, t2, t0 1735; CHECK-UNALIGNED-RV32-NEXT: xor t0, t3, t1 1736; CHECK-UNALIGNED-RV32-NEXT: xor a0, a0, a1 1737; CHECK-UNALIGNED-RV32-NEXT: or a2, a2, a3 1738; CHECK-UNALIGNED-RV32-NEXT: or a4, a4, a5 1739; CHECK-UNALIGNED-RV32-NEXT: or a1, a6, a7 1740; CHECK-UNALIGNED-RV32-NEXT: or a0, t0, a0 1741; CHECK-UNALIGNED-RV32-NEXT: or a2, a2, a4 1742; CHECK-UNALIGNED-RV32-NEXT: or a0, a1, a0 1743; CHECK-UNALIGNED-RV32-NEXT: or a0, a2, a0 1744; CHECK-UNALIGNED-RV32-NEXT: snez a0, a0 1745; CHECK-UNALIGNED-RV32-NEXT: ret 1746; 1747; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_32: 1748; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 1749; CHECK-UNALIGNED-RV64-NEXT: ld a2, 0(a0) 1750; CHECK-UNALIGNED-RV64-NEXT: ld a3, 8(a0) 1751; CHECK-UNALIGNED-RV64-NEXT: ld a4, 16(a0) 1752; CHECK-UNALIGNED-RV64-NEXT: ld a0, 24(a0) 1753; CHECK-UNALIGNED-RV64-NEXT: ld a5, 0(a1) 1754; CHECK-UNALIGNED-RV64-NEXT: ld a6, 8(a1) 1755; CHECK-UNALIGNED-RV64-NEXT: ld a7, 16(a1) 1756; CHECK-UNALIGNED-RV64-NEXT: ld a1, 24(a1) 1757; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a5 1758; CHECK-UNALIGNED-RV64-NEXT: xor a3, a3, a6 1759; CHECK-UNALIGNED-RV64-NEXT: xor a4, a4, a7 1760; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1 1761; CHECK-UNALIGNED-RV64-NEXT: or a2, a2, a3 1762; CHECK-UNALIGNED-RV64-NEXT: or a0, a4, a0 1763; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0 1764; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0 1765; CHECK-UNALIGNED-RV64-NEXT: ret 1766; 1767; CHECK-UNALIGNED-RV32-ZBB-LABEL: bcmp_size_32: 1768; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 1769; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 1770; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 4(a0) 1771; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a4, 8(a0) 1772; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a5, 12(a0) 1773; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a6, 0(a1) 1774; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a7, 4(a1) 1775; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t0, 8(a1) 1776; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t1, 12(a1) 1777; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a2, a2, a6 1778; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a6, 16(a0) 1779; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t2, 20(a0) 1780; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t3, 24(a0) 1781; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 28(a0) 1782; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a3, a3, a7 1783; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a4, a4, t0 1784; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a5, a5, t1 1785; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a7, 16(a1) 1786; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t0, 20(a1) 1787; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw t1, 24(a1) 1788; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 28(a1) 1789; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a6, a6, a7 1790; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a7, t2, t0 1791; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor t0, t3, t1 1792; CHECK-UNALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1 1793; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a2, a2, a3 1794; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a4, a4, a5 1795; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a1, a6, a7 1796; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, t0, a0 1797; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a2, a2, a4 1798; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a1, a0 1799; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a2, a0 1800; CHECK-UNALIGNED-RV32-ZBB-NEXT: snez a0, a0 1801; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 1802; 1803; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_32: 1804; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 1805; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 1806; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 8(a0) 1807; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a4, 16(a0) 1808; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 24(a0) 1809; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a5, 0(a1) 1810; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a6, 8(a1) 1811; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a7, 16(a1) 1812; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 24(a1) 1813; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a5 1814; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a3, a3, a6 1815; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a4, a4, a7 1816; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1 1817; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a2, a2, a3 1818; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a4, a0 1819; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0 1820; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0 1821; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 1822; 1823; CHECK-UNALIGNED-RV32-ZBKB-LABEL: bcmp_size_32: 1824; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 1825; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 1826; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 4(a0) 1827; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a4, 8(a0) 1828; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a5, 12(a0) 1829; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a6, 0(a1) 1830; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a7, 4(a1) 1831; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t0, 8(a1) 1832; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t1, 12(a1) 1833; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a2, a2, a6 1834; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a6, 16(a0) 1835; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t2, 20(a0) 1836; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t3, 24(a0) 1837; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 28(a0) 1838; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a3, a3, a7 1839; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a4, a4, t0 1840; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a5, a5, t1 1841; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a7, 16(a1) 1842; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t0, 20(a1) 1843; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw t1, 24(a1) 1844; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 28(a1) 1845; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a6, a6, a7 1846; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a7, t2, t0 1847; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor t0, t3, t1 1848; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1 1849; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a2, a2, a3 1850; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a4, a4, a5 1851; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a1, a6, a7 1852; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, t0, a0 1853; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a2, a2, a4 1854; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a1, a0 1855; CHECK-UNALIGNED-RV32-ZBKB-NEXT: or a0, a2, a0 1856; CHECK-UNALIGNED-RV32-ZBKB-NEXT: snez a0, a0 1857; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 1858; 1859; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_32: 1860; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 1861; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 1862; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 8(a0) 1863; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a4, 16(a0) 1864; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 24(a0) 1865; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a5, 0(a1) 1866; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a6, 8(a1) 1867; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a7, 16(a1) 1868; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 24(a1) 1869; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a5 1870; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a3, a3, a6 1871; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a4, a4, a7 1872; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1 1873; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a2, a2, a3 1874; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a4, a0 1875; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0 1876; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0 1877; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 1878; 1879; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_32: 1880; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 1881; CHECK-UNALIGNED-RV32-V-NEXT: lw a2, 0(a0) 1882; CHECK-UNALIGNED-RV32-V-NEXT: lw a3, 4(a0) 1883; CHECK-UNALIGNED-RV32-V-NEXT: lw a4, 8(a0) 1884; CHECK-UNALIGNED-RV32-V-NEXT: lw a5, 12(a0) 1885; CHECK-UNALIGNED-RV32-V-NEXT: lw a6, 0(a1) 1886; CHECK-UNALIGNED-RV32-V-NEXT: lw a7, 4(a1) 1887; CHECK-UNALIGNED-RV32-V-NEXT: lw t0, 8(a1) 1888; CHECK-UNALIGNED-RV32-V-NEXT: lw t1, 12(a1) 1889; CHECK-UNALIGNED-RV32-V-NEXT: xor a2, a2, a6 1890; CHECK-UNALIGNED-RV32-V-NEXT: lw a6, 16(a0) 1891; CHECK-UNALIGNED-RV32-V-NEXT: lw t2, 20(a0) 1892; CHECK-UNALIGNED-RV32-V-NEXT: lw t3, 24(a0) 1893; CHECK-UNALIGNED-RV32-V-NEXT: lw a0, 28(a0) 1894; CHECK-UNALIGNED-RV32-V-NEXT: xor a3, a3, a7 1895; CHECK-UNALIGNED-RV32-V-NEXT: xor a4, a4, t0 1896; CHECK-UNALIGNED-RV32-V-NEXT: xor a5, a5, t1 1897; CHECK-UNALIGNED-RV32-V-NEXT: lw a7, 16(a1) 1898; CHECK-UNALIGNED-RV32-V-NEXT: lw t0, 20(a1) 1899; CHECK-UNALIGNED-RV32-V-NEXT: lw t1, 24(a1) 1900; CHECK-UNALIGNED-RV32-V-NEXT: lw a1, 28(a1) 1901; CHECK-UNALIGNED-RV32-V-NEXT: xor a6, a6, a7 1902; CHECK-UNALIGNED-RV32-V-NEXT: xor a7, t2, t0 1903; CHECK-UNALIGNED-RV32-V-NEXT: xor t0, t3, t1 1904; CHECK-UNALIGNED-RV32-V-NEXT: xor a0, a0, a1 1905; CHECK-UNALIGNED-RV32-V-NEXT: or a2, a2, a3 1906; CHECK-UNALIGNED-RV32-V-NEXT: or a4, a4, a5 1907; CHECK-UNALIGNED-RV32-V-NEXT: or a1, a6, a7 1908; CHECK-UNALIGNED-RV32-V-NEXT: or a0, t0, a0 1909; CHECK-UNALIGNED-RV32-V-NEXT: or a2, a2, a4 1910; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a1, a0 1911; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a2, a0 1912; CHECK-UNALIGNED-RV32-V-NEXT: snez a0, a0 1913; CHECK-UNALIGNED-RV32-V-NEXT: ret 1914; 1915; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_32: 1916; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 1917; CHECK-UNALIGNED-RV64-V-NEXT: ld a2, 0(a0) 1918; CHECK-UNALIGNED-RV64-V-NEXT: ld a3, 8(a0) 1919; CHECK-UNALIGNED-RV64-V-NEXT: ld a4, 16(a0) 1920; CHECK-UNALIGNED-RV64-V-NEXT: ld a0, 24(a0) 1921; CHECK-UNALIGNED-RV64-V-NEXT: ld a5, 0(a1) 1922; CHECK-UNALIGNED-RV64-V-NEXT: ld a6, 8(a1) 1923; CHECK-UNALIGNED-RV64-V-NEXT: ld a7, 16(a1) 1924; CHECK-UNALIGNED-RV64-V-NEXT: ld a1, 24(a1) 1925; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a5 1926; CHECK-UNALIGNED-RV64-V-NEXT: xor a3, a3, a6 1927; CHECK-UNALIGNED-RV64-V-NEXT: xor a4, a4, a7 1928; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1 1929; CHECK-UNALIGNED-RV64-V-NEXT: or a2, a2, a3 1930; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a4, a0 1931; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0 1932; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0 1933; CHECK-UNALIGNED-RV64-V-NEXT: ret 1934entry: 1935 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 32) 1936 ret i32 %bcmp 1937} 1938 1939define i32 @bcmp_size_63(ptr %s1, ptr %s2) nounwind { 1940; CHECK-RV32-LABEL: bcmp_size_63: 1941; CHECK-RV32: # %bb.0: # %entry 1942; CHECK-RV32-NEXT: addi sp, sp, -16 1943; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1944; CHECK-RV32-NEXT: li a2, 63 1945; CHECK-RV32-NEXT: call bcmp 1946; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 1947; CHECK-RV32-NEXT: addi sp, sp, 16 1948; CHECK-RV32-NEXT: ret 1949; 1950; CHECK-ALIGNED-RV64-LABEL: bcmp_size_63: 1951; CHECK-ALIGNED-RV64: # %bb.0: # %entry 1952; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 1953; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1954; CHECK-ALIGNED-RV64-NEXT: li a2, 63 1955; CHECK-ALIGNED-RV64-NEXT: call bcmp 1956; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1957; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 1958; CHECK-ALIGNED-RV64-NEXT: ret 1959; 1960; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_63: 1961; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 1962; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 1963; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1964; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 63 1965; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 1966; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1967; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 1968; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 1969; 1970; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_63: 1971; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 1972; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 1973; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1974; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 63 1975; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 1976; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1977; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 1978; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 1979; 1980; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_63: 1981; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 1982; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 1983; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1984; CHECK-ALIGNED-RV64-V-NEXT: li a2, 63 1985; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 1986; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 1987; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 1988; CHECK-ALIGNED-RV64-V-NEXT: ret 1989; 1990; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_63: 1991; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 1992; CHECK-UNALIGNED-RV64-NEXT: ld a2, 0(a0) 1993; CHECK-UNALIGNED-RV64-NEXT: ld a3, 8(a0) 1994; CHECK-UNALIGNED-RV64-NEXT: ld a4, 16(a0) 1995; CHECK-UNALIGNED-RV64-NEXT: ld a5, 24(a0) 1996; CHECK-UNALIGNED-RV64-NEXT: ld a6, 0(a1) 1997; CHECK-UNALIGNED-RV64-NEXT: ld a7, 8(a1) 1998; CHECK-UNALIGNED-RV64-NEXT: ld t0, 16(a1) 1999; CHECK-UNALIGNED-RV64-NEXT: ld t1, 24(a1) 2000; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a6 2001; CHECK-UNALIGNED-RV64-NEXT: ld a6, 32(a0) 2002; CHECK-UNALIGNED-RV64-NEXT: ld t2, 40(a0) 2003; CHECK-UNALIGNED-RV64-NEXT: ld t3, 48(a0) 2004; CHECK-UNALIGNED-RV64-NEXT: ld a0, 55(a0) 2005; CHECK-UNALIGNED-RV64-NEXT: xor a3, a3, a7 2006; CHECK-UNALIGNED-RV64-NEXT: xor a4, a4, t0 2007; CHECK-UNALIGNED-RV64-NEXT: xor a5, a5, t1 2008; CHECK-UNALIGNED-RV64-NEXT: ld a7, 32(a1) 2009; CHECK-UNALIGNED-RV64-NEXT: ld t0, 40(a1) 2010; CHECK-UNALIGNED-RV64-NEXT: ld t1, 48(a1) 2011; CHECK-UNALIGNED-RV64-NEXT: ld a1, 55(a1) 2012; CHECK-UNALIGNED-RV64-NEXT: xor a6, a6, a7 2013; CHECK-UNALIGNED-RV64-NEXT: xor a7, t2, t0 2014; CHECK-UNALIGNED-RV64-NEXT: xor t0, t3, t1 2015; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1 2016; CHECK-UNALIGNED-RV64-NEXT: or a2, a2, a3 2017; CHECK-UNALIGNED-RV64-NEXT: or a4, a4, a5 2018; CHECK-UNALIGNED-RV64-NEXT: or a1, a6, a7 2019; CHECK-UNALIGNED-RV64-NEXT: or a0, t0, a0 2020; CHECK-UNALIGNED-RV64-NEXT: or a2, a2, a4 2021; CHECK-UNALIGNED-RV64-NEXT: or a0, a1, a0 2022; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0 2023; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0 2024; CHECK-UNALIGNED-RV64-NEXT: ret 2025; 2026; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_63: 2027; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 2028; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 2029; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 8(a0) 2030; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a4, 16(a0) 2031; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a5, 24(a0) 2032; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a6, 0(a1) 2033; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a7, 8(a1) 2034; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t0, 16(a1) 2035; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t1, 24(a1) 2036; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a6 2037; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a6, 32(a0) 2038; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t2, 40(a0) 2039; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t3, 48(a0) 2040; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 55(a0) 2041; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a3, a3, a7 2042; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a4, a4, t0 2043; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a5, a5, t1 2044; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a7, 32(a1) 2045; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t0, 40(a1) 2046; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t1, 48(a1) 2047; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 55(a1) 2048; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a6, a6, a7 2049; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a7, t2, t0 2050; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor t0, t3, t1 2051; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1 2052; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a2, a2, a3 2053; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a4, a4, a5 2054; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a1, a6, a7 2055; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, t0, a0 2056; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a2, a2, a4 2057; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a1, a0 2058; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0 2059; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0 2060; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 2061; 2062; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_63: 2063; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 2064; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 2065; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 8(a0) 2066; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a4, 16(a0) 2067; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a5, 24(a0) 2068; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a6, 0(a1) 2069; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a7, 8(a1) 2070; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t0, 16(a1) 2071; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t1, 24(a1) 2072; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a6 2073; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a6, 32(a0) 2074; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t2, 40(a0) 2075; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t3, 48(a0) 2076; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 55(a0) 2077; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a3, a3, a7 2078; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a4, a4, t0 2079; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a5, a5, t1 2080; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a7, 32(a1) 2081; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t0, 40(a1) 2082; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t1, 48(a1) 2083; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 55(a1) 2084; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a6, a6, a7 2085; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a7, t2, t0 2086; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor t0, t3, t1 2087; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1 2088; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a2, a2, a3 2089; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a4, a4, a5 2090; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a1, a6, a7 2091; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, t0, a0 2092; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a2, a2, a4 2093; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a1, a0 2094; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0 2095; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0 2096; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 2097; 2098; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_63: 2099; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 2100; CHECK-UNALIGNED-RV64-V-NEXT: ld a2, 0(a0) 2101; CHECK-UNALIGNED-RV64-V-NEXT: ld a3, 8(a0) 2102; CHECK-UNALIGNED-RV64-V-NEXT: ld a4, 16(a0) 2103; CHECK-UNALIGNED-RV64-V-NEXT: ld a5, 24(a0) 2104; CHECK-UNALIGNED-RV64-V-NEXT: ld a6, 0(a1) 2105; CHECK-UNALIGNED-RV64-V-NEXT: ld a7, 8(a1) 2106; CHECK-UNALIGNED-RV64-V-NEXT: ld t0, 16(a1) 2107; CHECK-UNALIGNED-RV64-V-NEXT: ld t1, 24(a1) 2108; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a6 2109; CHECK-UNALIGNED-RV64-V-NEXT: ld a6, 32(a0) 2110; CHECK-UNALIGNED-RV64-V-NEXT: ld t2, 40(a0) 2111; CHECK-UNALIGNED-RV64-V-NEXT: ld t3, 48(a0) 2112; CHECK-UNALIGNED-RV64-V-NEXT: ld a0, 55(a0) 2113; CHECK-UNALIGNED-RV64-V-NEXT: xor a3, a3, a7 2114; CHECK-UNALIGNED-RV64-V-NEXT: xor a4, a4, t0 2115; CHECK-UNALIGNED-RV64-V-NEXT: xor a5, a5, t1 2116; CHECK-UNALIGNED-RV64-V-NEXT: ld a7, 32(a1) 2117; CHECK-UNALIGNED-RV64-V-NEXT: ld t0, 40(a1) 2118; CHECK-UNALIGNED-RV64-V-NEXT: ld t1, 48(a1) 2119; CHECK-UNALIGNED-RV64-V-NEXT: ld a1, 55(a1) 2120; CHECK-UNALIGNED-RV64-V-NEXT: xor a6, a6, a7 2121; CHECK-UNALIGNED-RV64-V-NEXT: xor a7, t2, t0 2122; CHECK-UNALIGNED-RV64-V-NEXT: xor t0, t3, t1 2123; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1 2124; CHECK-UNALIGNED-RV64-V-NEXT: or a2, a2, a3 2125; CHECK-UNALIGNED-RV64-V-NEXT: or a4, a4, a5 2126; CHECK-UNALIGNED-RV64-V-NEXT: or a1, a6, a7 2127; CHECK-UNALIGNED-RV64-V-NEXT: or a0, t0, a0 2128; CHECK-UNALIGNED-RV64-V-NEXT: or a2, a2, a4 2129; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a1, a0 2130; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0 2131; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0 2132; CHECK-UNALIGNED-RV64-V-NEXT: ret 2133entry: 2134 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 63) 2135 ret i32 %bcmp 2136} 2137 2138define i32 @bcmp_size_64(ptr %s1, ptr %s2) nounwind { 2139; CHECK-RV32-LABEL: bcmp_size_64: 2140; CHECK-RV32: # %bb.0: # %entry 2141; CHECK-RV32-NEXT: addi sp, sp, -16 2142; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2143; CHECK-RV32-NEXT: li a2, 64 2144; CHECK-RV32-NEXT: call bcmp 2145; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2146; CHECK-RV32-NEXT: addi sp, sp, 16 2147; CHECK-RV32-NEXT: ret 2148; 2149; CHECK-ALIGNED-RV64-LABEL: bcmp_size_64: 2150; CHECK-ALIGNED-RV64: # %bb.0: # %entry 2151; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 2152; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2153; CHECK-ALIGNED-RV64-NEXT: li a2, 64 2154; CHECK-ALIGNED-RV64-NEXT: call bcmp 2155; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2156; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 2157; CHECK-ALIGNED-RV64-NEXT: ret 2158; 2159; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_size_64: 2160; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 2161; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 2162; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2163; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 64 2164; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 2165; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2166; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 2167; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 2168; 2169; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_size_64: 2170; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 2171; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 2172; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2173; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 64 2174; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 2175; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2176; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 2177; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 2178; 2179; CHECK-ALIGNED-RV64-V-LABEL: bcmp_size_64: 2180; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 2181; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 2182; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2183; CHECK-ALIGNED-RV64-V-NEXT: li a2, 64 2184; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 2185; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2186; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 2187; CHECK-ALIGNED-RV64-V-NEXT: ret 2188; 2189; CHECK-UNALIGNED-RV64-LABEL: bcmp_size_64: 2190; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 2191; CHECK-UNALIGNED-RV64-NEXT: ld a2, 0(a0) 2192; CHECK-UNALIGNED-RV64-NEXT: ld a3, 8(a0) 2193; CHECK-UNALIGNED-RV64-NEXT: ld a4, 16(a0) 2194; CHECK-UNALIGNED-RV64-NEXT: ld a5, 24(a0) 2195; CHECK-UNALIGNED-RV64-NEXT: ld a6, 0(a1) 2196; CHECK-UNALIGNED-RV64-NEXT: ld a7, 8(a1) 2197; CHECK-UNALIGNED-RV64-NEXT: ld t0, 16(a1) 2198; CHECK-UNALIGNED-RV64-NEXT: ld t1, 24(a1) 2199; CHECK-UNALIGNED-RV64-NEXT: xor a2, a2, a6 2200; CHECK-UNALIGNED-RV64-NEXT: ld a6, 32(a0) 2201; CHECK-UNALIGNED-RV64-NEXT: ld t2, 40(a0) 2202; CHECK-UNALIGNED-RV64-NEXT: ld t3, 48(a0) 2203; CHECK-UNALIGNED-RV64-NEXT: ld a0, 56(a0) 2204; CHECK-UNALIGNED-RV64-NEXT: xor a3, a3, a7 2205; CHECK-UNALIGNED-RV64-NEXT: xor a4, a4, t0 2206; CHECK-UNALIGNED-RV64-NEXT: xor a5, a5, t1 2207; CHECK-UNALIGNED-RV64-NEXT: ld a7, 32(a1) 2208; CHECK-UNALIGNED-RV64-NEXT: ld t0, 40(a1) 2209; CHECK-UNALIGNED-RV64-NEXT: ld t1, 48(a1) 2210; CHECK-UNALIGNED-RV64-NEXT: ld a1, 56(a1) 2211; CHECK-UNALIGNED-RV64-NEXT: xor a6, a6, a7 2212; CHECK-UNALIGNED-RV64-NEXT: xor a7, t2, t0 2213; CHECK-UNALIGNED-RV64-NEXT: xor t0, t3, t1 2214; CHECK-UNALIGNED-RV64-NEXT: xor a0, a0, a1 2215; CHECK-UNALIGNED-RV64-NEXT: or a2, a2, a3 2216; CHECK-UNALIGNED-RV64-NEXT: or a4, a4, a5 2217; CHECK-UNALIGNED-RV64-NEXT: or a1, a6, a7 2218; CHECK-UNALIGNED-RV64-NEXT: or a0, t0, a0 2219; CHECK-UNALIGNED-RV64-NEXT: or a2, a2, a4 2220; CHECK-UNALIGNED-RV64-NEXT: or a0, a1, a0 2221; CHECK-UNALIGNED-RV64-NEXT: or a0, a2, a0 2222; CHECK-UNALIGNED-RV64-NEXT: snez a0, a0 2223; CHECK-UNALIGNED-RV64-NEXT: ret 2224; 2225; CHECK-UNALIGNED-RV64-ZBB-LABEL: bcmp_size_64: 2226; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 2227; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 2228; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 8(a0) 2229; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a4, 16(a0) 2230; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a5, 24(a0) 2231; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a6, 0(a1) 2232; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a7, 8(a1) 2233; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t0, 16(a1) 2234; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t1, 24(a1) 2235; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a2, a2, a6 2236; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a6, 32(a0) 2237; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t2, 40(a0) 2238; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t3, 48(a0) 2239; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 56(a0) 2240; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a3, a3, a7 2241; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a4, a4, t0 2242; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a5, a5, t1 2243; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a7, 32(a1) 2244; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t0, 40(a1) 2245; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld t1, 48(a1) 2246; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 56(a1) 2247; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a6, a6, a7 2248; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a7, t2, t0 2249; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor t0, t3, t1 2250; CHECK-UNALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1 2251; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a2, a2, a3 2252; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a4, a4, a5 2253; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a1, a6, a7 2254; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, t0, a0 2255; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a2, a2, a4 2256; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a1, a0 2257; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a2, a0 2258; CHECK-UNALIGNED-RV64-ZBB-NEXT: snez a0, a0 2259; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 2260; 2261; CHECK-UNALIGNED-RV64-ZBKB-LABEL: bcmp_size_64: 2262; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 2263; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 2264; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 8(a0) 2265; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a4, 16(a0) 2266; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a5, 24(a0) 2267; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a6, 0(a1) 2268; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a7, 8(a1) 2269; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t0, 16(a1) 2270; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t1, 24(a1) 2271; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a2, a2, a6 2272; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a6, 32(a0) 2273; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t2, 40(a0) 2274; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t3, 48(a0) 2275; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 56(a0) 2276; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a3, a3, a7 2277; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a4, a4, t0 2278; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a5, a5, t1 2279; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a7, 32(a1) 2280; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t0, 40(a1) 2281; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld t1, 48(a1) 2282; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 56(a1) 2283; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a6, a6, a7 2284; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a7, t2, t0 2285; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor t0, t3, t1 2286; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1 2287; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a2, a2, a3 2288; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a4, a4, a5 2289; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a1, a6, a7 2290; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, t0, a0 2291; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a2, a2, a4 2292; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a1, a0 2293; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a2, a0 2294; CHECK-UNALIGNED-RV64-ZBKB-NEXT: snez a0, a0 2295; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 2296; 2297; CHECK-UNALIGNED-RV64-V-LABEL: bcmp_size_64: 2298; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 2299; CHECK-UNALIGNED-RV64-V-NEXT: ld a2, 0(a0) 2300; CHECK-UNALIGNED-RV64-V-NEXT: ld a3, 8(a0) 2301; CHECK-UNALIGNED-RV64-V-NEXT: ld a4, 16(a0) 2302; CHECK-UNALIGNED-RV64-V-NEXT: ld a5, 24(a0) 2303; CHECK-UNALIGNED-RV64-V-NEXT: ld a6, 0(a1) 2304; CHECK-UNALIGNED-RV64-V-NEXT: ld a7, 8(a1) 2305; CHECK-UNALIGNED-RV64-V-NEXT: ld t0, 16(a1) 2306; CHECK-UNALIGNED-RV64-V-NEXT: ld t1, 24(a1) 2307; CHECK-UNALIGNED-RV64-V-NEXT: xor a2, a2, a6 2308; CHECK-UNALIGNED-RV64-V-NEXT: ld a6, 32(a0) 2309; CHECK-UNALIGNED-RV64-V-NEXT: ld t2, 40(a0) 2310; CHECK-UNALIGNED-RV64-V-NEXT: ld t3, 48(a0) 2311; CHECK-UNALIGNED-RV64-V-NEXT: ld a0, 56(a0) 2312; CHECK-UNALIGNED-RV64-V-NEXT: xor a3, a3, a7 2313; CHECK-UNALIGNED-RV64-V-NEXT: xor a4, a4, t0 2314; CHECK-UNALIGNED-RV64-V-NEXT: xor a5, a5, t1 2315; CHECK-UNALIGNED-RV64-V-NEXT: ld a7, 32(a1) 2316; CHECK-UNALIGNED-RV64-V-NEXT: ld t0, 40(a1) 2317; CHECK-UNALIGNED-RV64-V-NEXT: ld t1, 48(a1) 2318; CHECK-UNALIGNED-RV64-V-NEXT: ld a1, 56(a1) 2319; CHECK-UNALIGNED-RV64-V-NEXT: xor a6, a6, a7 2320; CHECK-UNALIGNED-RV64-V-NEXT: xor a7, t2, t0 2321; CHECK-UNALIGNED-RV64-V-NEXT: xor t0, t3, t1 2322; CHECK-UNALIGNED-RV64-V-NEXT: xor a0, a0, a1 2323; CHECK-UNALIGNED-RV64-V-NEXT: or a2, a2, a3 2324; CHECK-UNALIGNED-RV64-V-NEXT: or a4, a4, a5 2325; CHECK-UNALIGNED-RV64-V-NEXT: or a1, a6, a7 2326; CHECK-UNALIGNED-RV64-V-NEXT: or a0, t0, a0 2327; CHECK-UNALIGNED-RV64-V-NEXT: or a2, a2, a4 2328; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a1, a0 2329; CHECK-UNALIGNED-RV64-V-NEXT: or a0, a2, a0 2330; CHECK-UNALIGNED-RV64-V-NEXT: snez a0, a0 2331; CHECK-UNALIGNED-RV64-V-NEXT: ret 2332entry: 2333 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 64) 2334 ret i32 %bcmp 2335} 2336 2337define i32 @bcmp_size_127(ptr %s1, ptr %s2) nounwind { 2338; CHECK-RV32-LABEL: bcmp_size_127: 2339; CHECK-RV32: # %bb.0: # %entry 2340; CHECK-RV32-NEXT: addi sp, sp, -16 2341; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2342; CHECK-RV32-NEXT: li a2, 127 2343; CHECK-RV32-NEXT: call bcmp 2344; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2345; CHECK-RV32-NEXT: addi sp, sp, 16 2346; CHECK-RV32-NEXT: ret 2347; 2348; CHECK-RV64-LABEL: bcmp_size_127: 2349; CHECK-RV64: # %bb.0: # %entry 2350; CHECK-RV64-NEXT: addi sp, sp, -16 2351; CHECK-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2352; CHECK-RV64-NEXT: li a2, 127 2353; CHECK-RV64-NEXT: call bcmp 2354; CHECK-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2355; CHECK-RV64-NEXT: addi sp, sp, 16 2356; CHECK-RV64-NEXT: ret 2357entry: 2358 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 127) 2359 ret i32 %bcmp 2360} 2361 2362define i32 @bcmp_size_128(ptr %s1, ptr %s2) nounwind { 2363; CHECK-RV32-LABEL: bcmp_size_128: 2364; CHECK-RV32: # %bb.0: # %entry 2365; CHECK-RV32-NEXT: addi sp, sp, -16 2366; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2367; CHECK-RV32-NEXT: li a2, 128 2368; CHECK-RV32-NEXT: call bcmp 2369; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2370; CHECK-RV32-NEXT: addi sp, sp, 16 2371; CHECK-RV32-NEXT: ret 2372; 2373; CHECK-RV64-LABEL: bcmp_size_128: 2374; CHECK-RV64: # %bb.0: # %entry 2375; CHECK-RV64-NEXT: addi sp, sp, -16 2376; CHECK-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2377; CHECK-RV64-NEXT: li a2, 128 2378; CHECK-RV64-NEXT: call bcmp 2379; CHECK-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2380; CHECK-RV64-NEXT: addi sp, sp, 16 2381; CHECK-RV64-NEXT: ret 2382entry: 2383 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 128) 2384 ret i32 %bcmp 2385} 2386 2387define i32 @bcmp_size_runtime(ptr %s1, ptr %s2, iXLen %len) nounwind { 2388; CHECK-RV32-LABEL: bcmp_size_runtime: 2389; CHECK-RV32: # %bb.0: # %entry 2390; CHECK-RV32-NEXT: addi sp, sp, -16 2391; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2392; CHECK-RV32-NEXT: call bcmp 2393; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2394; CHECK-RV32-NEXT: addi sp, sp, 16 2395; CHECK-RV32-NEXT: ret 2396; 2397; CHECK-RV64-LABEL: bcmp_size_runtime: 2398; CHECK-RV64: # %bb.0: # %entry 2399; CHECK-RV64-NEXT: addi sp, sp, -16 2400; CHECK-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2401; CHECK-RV64-NEXT: call bcmp 2402; CHECK-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2403; CHECK-RV64-NEXT: addi sp, sp, 16 2404; CHECK-RV64-NEXT: ret 2405entry: 2406 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen %len) 2407 ret i32 %bcmp 2408} 2409 2410define i1 @bcmp_eq_zero(ptr %s1, ptr %s2) nounwind { 2411; CHECK-ALIGNED-RV32-LABEL: bcmp_eq_zero: 2412; CHECK-ALIGNED-RV32: # %bb.0: # %entry 2413; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 2414; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2415; CHECK-ALIGNED-RV32-NEXT: li a2, 4 2416; CHECK-ALIGNED-RV32-NEXT: call bcmp 2417; CHECK-ALIGNED-RV32-NEXT: seqz a0, a0 2418; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2419; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 2420; CHECK-ALIGNED-RV32-NEXT: ret 2421; 2422; CHECK-ALIGNED-RV64-LABEL: bcmp_eq_zero: 2423; CHECK-ALIGNED-RV64: # %bb.0: # %entry 2424; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 2425; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2426; CHECK-ALIGNED-RV64-NEXT: li a2, 4 2427; CHECK-ALIGNED-RV64-NEXT: call bcmp 2428; CHECK-ALIGNED-RV64-NEXT: seqz a0, a0 2429; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2430; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 2431; CHECK-ALIGNED-RV64-NEXT: ret 2432; 2433; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_eq_zero: 2434; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 2435; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 2436; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2437; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 2438; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 2439; CHECK-ALIGNED-RV32-ZBB-NEXT: seqz a0, a0 2440; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2441; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 2442; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 2443; 2444; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_eq_zero: 2445; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 2446; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 2447; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2448; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 2449; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 2450; CHECK-ALIGNED-RV64-ZBB-NEXT: seqz a0, a0 2451; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2452; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 2453; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 2454; 2455; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_eq_zero: 2456; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 2457; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 2458; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2459; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 2460; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 2461; CHECK-ALIGNED-RV32-ZBKB-NEXT: seqz a0, a0 2462; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2463; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 2464; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 2465; 2466; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_eq_zero: 2467; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 2468; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 2469; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2470; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 2471; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 2472; CHECK-ALIGNED-RV64-ZBKB-NEXT: seqz a0, a0 2473; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2474; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 2475; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 2476; 2477; CHECK-ALIGNED-RV32-V-LABEL: bcmp_eq_zero: 2478; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 2479; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 2480; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2481; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 2482; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 2483; CHECK-ALIGNED-RV32-V-NEXT: seqz a0, a0 2484; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2485; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 2486; CHECK-ALIGNED-RV32-V-NEXT: ret 2487; 2488; CHECK-ALIGNED-RV64-V-LABEL: bcmp_eq_zero: 2489; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 2490; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 2491; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2492; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 2493; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 2494; CHECK-ALIGNED-RV64-V-NEXT: seqz a0, a0 2495; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2496; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 2497; CHECK-ALIGNED-RV64-V-NEXT: ret 2498; 2499; CHECK-UNALIGNED-LABEL: bcmp_eq_zero: 2500; CHECK-UNALIGNED: # %bb.0: # %entry 2501; CHECK-UNALIGNED-NEXT: lw a0, 0(a0) 2502; CHECK-UNALIGNED-NEXT: lw a1, 0(a1) 2503; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 2504; CHECK-UNALIGNED-NEXT: seqz a0, a0 2505; CHECK-UNALIGNED-NEXT: ret 2506entry: 2507 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4) 2508 %ret = icmp eq i32 %bcmp, 0 2509 ret i1 %ret 2510} 2511 2512define i1 @bcmp_lt_zero(ptr %s1, ptr %s2) nounwind { 2513; CHECK-ALIGNED-RV32-LABEL: bcmp_lt_zero: 2514; CHECK-ALIGNED-RV32: # %bb.0: # %entry 2515; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 2516; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2517; CHECK-ALIGNED-RV32-NEXT: li a2, 4 2518; CHECK-ALIGNED-RV32-NEXT: call bcmp 2519; CHECK-ALIGNED-RV32-NEXT: srli a0, a0, 31 2520; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2521; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 2522; CHECK-ALIGNED-RV32-NEXT: ret 2523; 2524; CHECK-ALIGNED-RV64-LABEL: bcmp_lt_zero: 2525; CHECK-ALIGNED-RV64: # %bb.0: # %entry 2526; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 2527; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2528; CHECK-ALIGNED-RV64-NEXT: li a2, 4 2529; CHECK-ALIGNED-RV64-NEXT: call bcmp 2530; CHECK-ALIGNED-RV64-NEXT: slti a0, a0, 0 2531; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2532; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 2533; CHECK-ALIGNED-RV64-NEXT: ret 2534; 2535; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_lt_zero: 2536; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 2537; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 2538; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2539; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 2540; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 2541; CHECK-ALIGNED-RV32-ZBB-NEXT: srli a0, a0, 31 2542; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2543; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 2544; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 2545; 2546; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_lt_zero: 2547; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 2548; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 2549; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2550; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 2551; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 2552; CHECK-ALIGNED-RV64-ZBB-NEXT: slti a0, a0, 0 2553; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2554; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 2555; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 2556; 2557; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_lt_zero: 2558; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 2559; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 2560; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2561; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 2562; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 2563; CHECK-ALIGNED-RV32-ZBKB-NEXT: srli a0, a0, 31 2564; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2565; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 2566; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 2567; 2568; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_lt_zero: 2569; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 2570; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 2571; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2572; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 2573; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 2574; CHECK-ALIGNED-RV64-ZBKB-NEXT: slti a0, a0, 0 2575; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2576; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 2577; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 2578; 2579; CHECK-ALIGNED-RV32-V-LABEL: bcmp_lt_zero: 2580; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 2581; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 2582; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2583; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 2584; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 2585; CHECK-ALIGNED-RV32-V-NEXT: srli a0, a0, 31 2586; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2587; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 2588; CHECK-ALIGNED-RV32-V-NEXT: ret 2589; 2590; CHECK-ALIGNED-RV64-V-LABEL: bcmp_lt_zero: 2591; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 2592; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 2593; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2594; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 2595; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 2596; CHECK-ALIGNED-RV64-V-NEXT: slti a0, a0, 0 2597; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2598; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 2599; CHECK-ALIGNED-RV64-V-NEXT: ret 2600; 2601; CHECK-UNALIGNED-LABEL: bcmp_lt_zero: 2602; CHECK-UNALIGNED: # %bb.0: # %entry 2603; CHECK-UNALIGNED-NEXT: li a0, 0 2604; CHECK-UNALIGNED-NEXT: ret 2605entry: 2606 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4) 2607 %ret = icmp slt i32 %bcmp, 0 2608 ret i1 %ret 2609} 2610 2611define i1 @bcmp_gt_zero(ptr %s1, ptr %s2) nounwind { 2612; CHECK-ALIGNED-RV32-LABEL: bcmp_gt_zero: 2613; CHECK-ALIGNED-RV32: # %bb.0: # %entry 2614; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 2615; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2616; CHECK-ALIGNED-RV32-NEXT: li a2, 4 2617; CHECK-ALIGNED-RV32-NEXT: call bcmp 2618; CHECK-ALIGNED-RV32-NEXT: sgtz a0, a0 2619; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2620; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 2621; CHECK-ALIGNED-RV32-NEXT: ret 2622; 2623; CHECK-ALIGNED-RV64-LABEL: bcmp_gt_zero: 2624; CHECK-ALIGNED-RV64: # %bb.0: # %entry 2625; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 2626; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2627; CHECK-ALIGNED-RV64-NEXT: li a2, 4 2628; CHECK-ALIGNED-RV64-NEXT: call bcmp 2629; CHECK-ALIGNED-RV64-NEXT: sgtz a0, a0 2630; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2631; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 2632; CHECK-ALIGNED-RV64-NEXT: ret 2633; 2634; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_gt_zero: 2635; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 2636; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 2637; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2638; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 2639; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 2640; CHECK-ALIGNED-RV32-ZBB-NEXT: sgtz a0, a0 2641; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2642; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 2643; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 2644; 2645; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_gt_zero: 2646; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 2647; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 2648; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2649; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 2650; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 2651; CHECK-ALIGNED-RV64-ZBB-NEXT: sgtz a0, a0 2652; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2653; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 2654; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 2655; 2656; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_gt_zero: 2657; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 2658; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 2659; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2660; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 2661; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 2662; CHECK-ALIGNED-RV32-ZBKB-NEXT: sgtz a0, a0 2663; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2664; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 2665; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 2666; 2667; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_gt_zero: 2668; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 2669; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 2670; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2671; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 2672; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 2673; CHECK-ALIGNED-RV64-ZBKB-NEXT: sgtz a0, a0 2674; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2675; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 2676; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 2677; 2678; CHECK-ALIGNED-RV32-V-LABEL: bcmp_gt_zero: 2679; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 2680; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 2681; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2682; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 2683; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 2684; CHECK-ALIGNED-RV32-V-NEXT: sgtz a0, a0 2685; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2686; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 2687; CHECK-ALIGNED-RV32-V-NEXT: ret 2688; 2689; CHECK-ALIGNED-RV64-V-LABEL: bcmp_gt_zero: 2690; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 2691; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 2692; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2693; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 2694; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 2695; CHECK-ALIGNED-RV64-V-NEXT: sgtz a0, a0 2696; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2697; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 2698; CHECK-ALIGNED-RV64-V-NEXT: ret 2699; 2700; CHECK-UNALIGNED-LABEL: bcmp_gt_zero: 2701; CHECK-UNALIGNED: # %bb.0: # %entry 2702; CHECK-UNALIGNED-NEXT: lw a0, 0(a0) 2703; CHECK-UNALIGNED-NEXT: lw a1, 0(a1) 2704; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 2705; CHECK-UNALIGNED-NEXT: snez a0, a0 2706; CHECK-UNALIGNED-NEXT: ret 2707entry: 2708 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4) 2709 %ret = icmp sgt i32 %bcmp, 0 2710 ret i1 %ret 2711} 2712 2713define i1 @bcmp_le_zero(ptr %s1, ptr %s2) nounwind { 2714; CHECK-ALIGNED-RV32-LABEL: bcmp_le_zero: 2715; CHECK-ALIGNED-RV32: # %bb.0: # %entry 2716; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 2717; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2718; CHECK-ALIGNED-RV32-NEXT: li a2, 4 2719; CHECK-ALIGNED-RV32-NEXT: call bcmp 2720; CHECK-ALIGNED-RV32-NEXT: slti a0, a0, 1 2721; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2722; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 2723; CHECK-ALIGNED-RV32-NEXT: ret 2724; 2725; CHECK-ALIGNED-RV64-LABEL: bcmp_le_zero: 2726; CHECK-ALIGNED-RV64: # %bb.0: # %entry 2727; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 2728; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2729; CHECK-ALIGNED-RV64-NEXT: li a2, 4 2730; CHECK-ALIGNED-RV64-NEXT: call bcmp 2731; CHECK-ALIGNED-RV64-NEXT: slti a0, a0, 1 2732; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2733; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 2734; CHECK-ALIGNED-RV64-NEXT: ret 2735; 2736; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_le_zero: 2737; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 2738; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 2739; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2740; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 2741; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 2742; CHECK-ALIGNED-RV32-ZBB-NEXT: slti a0, a0, 1 2743; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2744; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 2745; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 2746; 2747; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_le_zero: 2748; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 2749; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 2750; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2751; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 2752; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 2753; CHECK-ALIGNED-RV64-ZBB-NEXT: slti a0, a0, 1 2754; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2755; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 2756; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 2757; 2758; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_le_zero: 2759; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 2760; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 2761; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2762; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 2763; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 2764; CHECK-ALIGNED-RV32-ZBKB-NEXT: slti a0, a0, 1 2765; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2766; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 2767; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 2768; 2769; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_le_zero: 2770; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 2771; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 2772; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2773; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 2774; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 2775; CHECK-ALIGNED-RV64-ZBKB-NEXT: slti a0, a0, 1 2776; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2777; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 2778; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 2779; 2780; CHECK-ALIGNED-RV32-V-LABEL: bcmp_le_zero: 2781; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 2782; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 2783; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2784; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 2785; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 2786; CHECK-ALIGNED-RV32-V-NEXT: slti a0, a0, 1 2787; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2788; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 2789; CHECK-ALIGNED-RV32-V-NEXT: ret 2790; 2791; CHECK-ALIGNED-RV64-V-LABEL: bcmp_le_zero: 2792; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 2793; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 2794; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2795; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 2796; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 2797; CHECK-ALIGNED-RV64-V-NEXT: slti a0, a0, 1 2798; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2799; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 2800; CHECK-ALIGNED-RV64-V-NEXT: ret 2801; 2802; CHECK-UNALIGNED-LABEL: bcmp_le_zero: 2803; CHECK-UNALIGNED: # %bb.0: # %entry 2804; CHECK-UNALIGNED-NEXT: lw a0, 0(a0) 2805; CHECK-UNALIGNED-NEXT: lw a1, 0(a1) 2806; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 2807; CHECK-UNALIGNED-NEXT: snez a0, a0 2808; CHECK-UNALIGNED-NEXT: slti a0, a0, 1 2809; CHECK-UNALIGNED-NEXT: ret 2810entry: 2811 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4) 2812 %ret = icmp slt i32 %bcmp, 1 2813 ret i1 %ret 2814} 2815 2816define i1 @bcmp_ge_zero(ptr %s1, ptr %s2) nounwind { 2817; CHECK-ALIGNED-RV32-LABEL: bcmp_ge_zero: 2818; CHECK-ALIGNED-RV32: # %bb.0: # %entry 2819; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 2820; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2821; CHECK-ALIGNED-RV32-NEXT: li a2, 4 2822; CHECK-ALIGNED-RV32-NEXT: call bcmp 2823; CHECK-ALIGNED-RV32-NEXT: slti a0, a0, 0 2824; CHECK-ALIGNED-RV32-NEXT: xori a0, a0, 1 2825; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2826; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 2827; CHECK-ALIGNED-RV32-NEXT: ret 2828; 2829; CHECK-ALIGNED-RV64-LABEL: bcmp_ge_zero: 2830; CHECK-ALIGNED-RV64: # %bb.0: # %entry 2831; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 2832; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2833; CHECK-ALIGNED-RV64-NEXT: li a2, 4 2834; CHECK-ALIGNED-RV64-NEXT: call bcmp 2835; CHECK-ALIGNED-RV64-NEXT: slti a0, a0, 0 2836; CHECK-ALIGNED-RV64-NEXT: xori a0, a0, 1 2837; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2838; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 2839; CHECK-ALIGNED-RV64-NEXT: ret 2840; 2841; CHECK-ALIGNED-RV32-ZBB-LABEL: bcmp_ge_zero: 2842; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 2843; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 2844; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2845; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 2846; CHECK-ALIGNED-RV32-ZBB-NEXT: call bcmp 2847; CHECK-ALIGNED-RV32-ZBB-NEXT: slti a0, a0, 0 2848; CHECK-ALIGNED-RV32-ZBB-NEXT: xori a0, a0, 1 2849; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2850; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 2851; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 2852; 2853; CHECK-ALIGNED-RV64-ZBB-LABEL: bcmp_ge_zero: 2854; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 2855; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 2856; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2857; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 2858; CHECK-ALIGNED-RV64-ZBB-NEXT: call bcmp 2859; CHECK-ALIGNED-RV64-ZBB-NEXT: slti a0, a0, 0 2860; CHECK-ALIGNED-RV64-ZBB-NEXT: xori a0, a0, 1 2861; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2862; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 2863; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 2864; 2865; CHECK-ALIGNED-RV32-ZBKB-LABEL: bcmp_ge_zero: 2866; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 2867; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 2868; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2869; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 2870; CHECK-ALIGNED-RV32-ZBKB-NEXT: call bcmp 2871; CHECK-ALIGNED-RV32-ZBKB-NEXT: slti a0, a0, 0 2872; CHECK-ALIGNED-RV32-ZBKB-NEXT: xori a0, a0, 1 2873; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2874; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 2875; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 2876; 2877; CHECK-ALIGNED-RV64-ZBKB-LABEL: bcmp_ge_zero: 2878; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 2879; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 2880; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2881; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 2882; CHECK-ALIGNED-RV64-ZBKB-NEXT: call bcmp 2883; CHECK-ALIGNED-RV64-ZBKB-NEXT: slti a0, a0, 0 2884; CHECK-ALIGNED-RV64-ZBKB-NEXT: xori a0, a0, 1 2885; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2886; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 2887; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 2888; 2889; CHECK-ALIGNED-RV32-V-LABEL: bcmp_ge_zero: 2890; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 2891; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 2892; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2893; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 2894; CHECK-ALIGNED-RV32-V-NEXT: call bcmp 2895; CHECK-ALIGNED-RV32-V-NEXT: slti a0, a0, 0 2896; CHECK-ALIGNED-RV32-V-NEXT: xori a0, a0, 1 2897; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2898; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 2899; CHECK-ALIGNED-RV32-V-NEXT: ret 2900; 2901; CHECK-ALIGNED-RV64-V-LABEL: bcmp_ge_zero: 2902; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 2903; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 2904; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2905; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 2906; CHECK-ALIGNED-RV64-V-NEXT: call bcmp 2907; CHECK-ALIGNED-RV64-V-NEXT: slti a0, a0, 0 2908; CHECK-ALIGNED-RV64-V-NEXT: xori a0, a0, 1 2909; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2910; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 2911; CHECK-ALIGNED-RV64-V-NEXT: ret 2912; 2913; CHECK-UNALIGNED-LABEL: bcmp_ge_zero: 2914; CHECK-UNALIGNED: # %bb.0: # %entry 2915; CHECK-UNALIGNED-NEXT: li a0, 1 2916; CHECK-UNALIGNED-NEXT: ret 2917entry: 2918 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iXLen 4) 2919 %ret = icmp sgt i32 %bcmp, -1 2920 ret i1 %ret 2921} 2922 2923define i32 @memcmp_size_0(ptr %s1, ptr %s2) nounwind { 2924; CHECK-LABEL: memcmp_size_0: 2925; CHECK: # %bb.0: # %entry 2926; CHECK-NEXT: li a0, 0 2927; CHECK-NEXT: ret 2928entry: 2929 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 0) 2930 ret i32 %memcmp 2931} 2932 2933define i32 @memcmp_size_1(ptr %s1, ptr %s2) nounwind { 2934; CHECK-ALIGNED-RV32-LABEL: memcmp_size_1: 2935; CHECK-ALIGNED-RV32: # %bb.0: # %entry 2936; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 2937; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2938; CHECK-ALIGNED-RV32-NEXT: li a2, 1 2939; CHECK-ALIGNED-RV32-NEXT: call memcmp 2940; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2941; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 2942; CHECK-ALIGNED-RV32-NEXT: ret 2943; 2944; CHECK-ALIGNED-RV64-LABEL: memcmp_size_1: 2945; CHECK-ALIGNED-RV64: # %bb.0: # %entry 2946; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 2947; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2948; CHECK-ALIGNED-RV64-NEXT: li a2, 1 2949; CHECK-ALIGNED-RV64-NEXT: call memcmp 2950; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2951; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 2952; CHECK-ALIGNED-RV64-NEXT: ret 2953; 2954; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_1: 2955; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 2956; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 2957; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2958; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 1 2959; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 2960; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2961; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 2962; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 2963; 2964; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_1: 2965; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 2966; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 2967; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2968; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 1 2969; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 2970; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2971; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 2972; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 2973; 2974; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_1: 2975; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 2976; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 2977; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2978; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 1 2979; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 2980; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 2981; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 2982; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 2983; 2984; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_1: 2985; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 2986; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 2987; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 2988; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 1 2989; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 2990; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 2991; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 2992; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 2993; 2994; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_1: 2995; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 2996; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 2997; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 2998; CHECK-ALIGNED-RV32-V-NEXT: li a2, 1 2999; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 3000; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3001; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 3002; CHECK-ALIGNED-RV32-V-NEXT: ret 3003; 3004; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_1: 3005; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 3006; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 3007; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3008; CHECK-ALIGNED-RV64-V-NEXT: li a2, 1 3009; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 3010; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3011; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 3012; CHECK-ALIGNED-RV64-V-NEXT: ret 3013; 3014; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_1: 3015; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 3016; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 3017; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3018; CHECK-UNALIGNED-RV32-NEXT: li a2, 1 3019; CHECK-UNALIGNED-RV32-NEXT: call memcmp 3020; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3021; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 3022; CHECK-UNALIGNED-RV32-NEXT: ret 3023; 3024; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_1: 3025; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 3026; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 3027; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3028; CHECK-UNALIGNED-RV64-NEXT: li a2, 1 3029; CHECK-UNALIGNED-RV64-NEXT: call memcmp 3030; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3031; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 3032; CHECK-UNALIGNED-RV64-NEXT: ret 3033; 3034; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_1: 3035; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 3036; CHECK-UNALIGNED-RV32-ZBB-NEXT: lbu a0, 0(a0) 3037; CHECK-UNALIGNED-RV32-ZBB-NEXT: lbu a1, 0(a1) 3038; CHECK-UNALIGNED-RV32-ZBB-NEXT: sub a0, a0, a1 3039; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 3040; 3041; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_1: 3042; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 3043; CHECK-UNALIGNED-RV64-ZBB-NEXT: lbu a0, 0(a0) 3044; CHECK-UNALIGNED-RV64-ZBB-NEXT: lbu a1, 0(a1) 3045; CHECK-UNALIGNED-RV64-ZBB-NEXT: sub a0, a0, a1 3046; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 3047; 3048; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_1: 3049; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 3050; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lbu a0, 0(a0) 3051; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lbu a1, 0(a1) 3052; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sub a0, a0, a1 3053; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 3054; 3055; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_1: 3056; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 3057; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lbu a0, 0(a0) 3058; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lbu a1, 0(a1) 3059; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sub a0, a0, a1 3060; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 3061; 3062; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_1: 3063; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 3064; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 3065; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3066; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 1 3067; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 3068; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3069; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 3070; CHECK-UNALIGNED-RV32-V-NEXT: ret 3071; 3072; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_1: 3073; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 3074; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 3075; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3076; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 1 3077; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 3078; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3079; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 3080; CHECK-UNALIGNED-RV64-V-NEXT: ret 3081entry: 3082 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 1) 3083 ret i32 %memcmp 3084} 3085 3086define i32 @memcmp_size_2(ptr %s1, ptr %s2) nounwind { 3087; CHECK-ALIGNED-RV32-LABEL: memcmp_size_2: 3088; CHECK-ALIGNED-RV32: # %bb.0: # %entry 3089; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 3090; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3091; CHECK-ALIGNED-RV32-NEXT: li a2, 2 3092; CHECK-ALIGNED-RV32-NEXT: call memcmp 3093; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3094; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 3095; CHECK-ALIGNED-RV32-NEXT: ret 3096; 3097; CHECK-ALIGNED-RV64-LABEL: memcmp_size_2: 3098; CHECK-ALIGNED-RV64: # %bb.0: # %entry 3099; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 3100; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3101; CHECK-ALIGNED-RV64-NEXT: li a2, 2 3102; CHECK-ALIGNED-RV64-NEXT: call memcmp 3103; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3104; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 3105; CHECK-ALIGNED-RV64-NEXT: ret 3106; 3107; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_2: 3108; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 3109; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 3110; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3111; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 2 3112; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 3113; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3114; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 3115; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 3116; 3117; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_2: 3118; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 3119; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 3120; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3121; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 2 3122; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 3123; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3124; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 3125; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 3126; 3127; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_2: 3128; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 3129; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 3130; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3131; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 2 3132; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 3133; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3134; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 3135; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 3136; 3137; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_2: 3138; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 3139; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 3140; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3141; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 2 3142; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 3143; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3144; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 3145; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 3146; 3147; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_2: 3148; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 3149; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 3150; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3151; CHECK-ALIGNED-RV32-V-NEXT: li a2, 2 3152; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 3153; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3154; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 3155; CHECK-ALIGNED-RV32-V-NEXT: ret 3156; 3157; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_2: 3158; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 3159; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 3160; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3161; CHECK-ALIGNED-RV64-V-NEXT: li a2, 2 3162; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 3163; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3164; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 3165; CHECK-ALIGNED-RV64-V-NEXT: ret 3166; 3167; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_2: 3168; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 3169; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 3170; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3171; CHECK-UNALIGNED-RV32-NEXT: li a2, 2 3172; CHECK-UNALIGNED-RV32-NEXT: call memcmp 3173; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3174; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 3175; CHECK-UNALIGNED-RV32-NEXT: ret 3176; 3177; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_2: 3178; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 3179; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 3180; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3181; CHECK-UNALIGNED-RV64-NEXT: li a2, 2 3182; CHECK-UNALIGNED-RV64-NEXT: call memcmp 3183; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3184; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 3185; CHECK-UNALIGNED-RV64-NEXT: ret 3186; 3187; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_2: 3188; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 3189; CHECK-UNALIGNED-RV32-ZBB-NEXT: lh a0, 0(a0) 3190; CHECK-UNALIGNED-RV32-ZBB-NEXT: lh a1, 0(a1) 3191; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a0, a0 3192; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a1, a1 3193; CHECK-UNALIGNED-RV32-ZBB-NEXT: srli a0, a0, 16 3194; CHECK-UNALIGNED-RV32-ZBB-NEXT: srli a1, a1, 16 3195; CHECK-UNALIGNED-RV32-ZBB-NEXT: sub a0, a0, a1 3196; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 3197; 3198; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_2: 3199; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 3200; CHECK-UNALIGNED-RV64-ZBB-NEXT: lh a0, 0(a0) 3201; CHECK-UNALIGNED-RV64-ZBB-NEXT: lh a1, 0(a1) 3202; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 3203; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 3204; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a0, a0, 48 3205; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a1, a1, 48 3206; CHECK-UNALIGNED-RV64-ZBB-NEXT: sub a0, a0, a1 3207; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 3208; 3209; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_2: 3210; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 3211; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lh a0, 0(a0) 3212; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lh a1, 0(a1) 3213; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a0, a0 3214; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a1, a1 3215; CHECK-UNALIGNED-RV32-ZBKB-NEXT: srli a0, a0, 16 3216; CHECK-UNALIGNED-RV32-ZBKB-NEXT: srli a1, a1, 16 3217; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sub a0, a0, a1 3218; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 3219; 3220; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_2: 3221; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 3222; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lh a0, 0(a0) 3223; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lh a1, 0(a1) 3224; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 3225; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 3226; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a0, a0, 48 3227; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a1, a1, 48 3228; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sub a0, a0, a1 3229; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 3230; 3231; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_2: 3232; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 3233; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 3234; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3235; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 2 3236; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 3237; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3238; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 3239; CHECK-UNALIGNED-RV32-V-NEXT: ret 3240; 3241; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_2: 3242; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 3243; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 3244; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3245; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 2 3246; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 3247; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3248; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 3249; CHECK-UNALIGNED-RV64-V-NEXT: ret 3250entry: 3251 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 2) 3252 ret i32 %memcmp 3253} 3254 3255define i32 @memcmp_size_3(ptr %s1, ptr %s2) nounwind { 3256; CHECK-ALIGNED-RV32-LABEL: memcmp_size_3: 3257; CHECK-ALIGNED-RV32: # %bb.0: # %entry 3258; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 3259; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3260; CHECK-ALIGNED-RV32-NEXT: li a2, 3 3261; CHECK-ALIGNED-RV32-NEXT: call memcmp 3262; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3263; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 3264; CHECK-ALIGNED-RV32-NEXT: ret 3265; 3266; CHECK-ALIGNED-RV64-LABEL: memcmp_size_3: 3267; CHECK-ALIGNED-RV64: # %bb.0: # %entry 3268; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 3269; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3270; CHECK-ALIGNED-RV64-NEXT: li a2, 3 3271; CHECK-ALIGNED-RV64-NEXT: call memcmp 3272; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3273; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 3274; CHECK-ALIGNED-RV64-NEXT: ret 3275; 3276; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_3: 3277; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 3278; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 3279; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3280; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 3 3281; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 3282; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3283; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 3284; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 3285; 3286; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_3: 3287; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 3288; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 3289; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3290; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 3 3291; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 3292; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3293; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 3294; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 3295; 3296; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_3: 3297; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 3298; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 3299; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3300; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 3 3301; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 3302; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3303; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 3304; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 3305; 3306; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_3: 3307; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 3308; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 3309; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3310; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 3 3311; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 3312; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3313; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 3314; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 3315; 3316; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_3: 3317; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 3318; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 3319; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3320; CHECK-ALIGNED-RV32-V-NEXT: li a2, 3 3321; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 3322; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3323; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 3324; CHECK-ALIGNED-RV32-V-NEXT: ret 3325; 3326; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_3: 3327; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 3328; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 3329; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3330; CHECK-ALIGNED-RV64-V-NEXT: li a2, 3 3331; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 3332; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3333; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 3334; CHECK-ALIGNED-RV64-V-NEXT: ret 3335; 3336; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_3: 3337; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 3338; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 3339; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3340; CHECK-UNALIGNED-RV32-NEXT: li a2, 3 3341; CHECK-UNALIGNED-RV32-NEXT: call memcmp 3342; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3343; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 3344; CHECK-UNALIGNED-RV32-NEXT: ret 3345; 3346; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_3: 3347; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 3348; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 3349; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3350; CHECK-UNALIGNED-RV64-NEXT: li a2, 3 3351; CHECK-UNALIGNED-RV64-NEXT: call memcmp 3352; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3353; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 3354; CHECK-UNALIGNED-RV64-NEXT: ret 3355; 3356; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_3: 3357; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 3358; CHECK-UNALIGNED-RV32-ZBB-NEXT: lbu a2, 2(a0) 3359; CHECK-UNALIGNED-RV32-ZBB-NEXT: lhu a0, 0(a0) 3360; CHECK-UNALIGNED-RV32-ZBB-NEXT: lbu a3, 2(a1) 3361; CHECK-UNALIGNED-RV32-ZBB-NEXT: lhu a1, 0(a1) 3362; CHECK-UNALIGNED-RV32-ZBB-NEXT: slli a2, a2, 16 3363; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a0, a0, a2 3364; CHECK-UNALIGNED-RV32-ZBB-NEXT: slli a3, a3, 16 3365; CHECK-UNALIGNED-RV32-ZBB-NEXT: or a1, a1, a3 3366; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a0, a0 3367; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a1, a1 3368; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a2, a0, a1 3369; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a1, a0 3370; CHECK-UNALIGNED-RV32-ZBB-NEXT: sub a0, a0, a2 3371; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 3372; 3373; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_3: 3374; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 3375; CHECK-UNALIGNED-RV64-ZBB-NEXT: lbu a2, 2(a0) 3376; CHECK-UNALIGNED-RV64-ZBB-NEXT: lhu a0, 0(a0) 3377; CHECK-UNALIGNED-RV64-ZBB-NEXT: lbu a3, 2(a1) 3378; CHECK-UNALIGNED-RV64-ZBB-NEXT: lhu a1, 0(a1) 3379; CHECK-UNALIGNED-RV64-ZBB-NEXT: slli a2, a2, 16 3380; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a0, a2 3381; CHECK-UNALIGNED-RV64-ZBB-NEXT: slli a3, a3, 16 3382; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a1, a1, a3 3383; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 3384; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 3385; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a0, a0, 32 3386; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a1, a1, 32 3387; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a2, a0, a1 3388; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a1, a0 3389; CHECK-UNALIGNED-RV64-ZBB-NEXT: sub a0, a0, a2 3390; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 3391; 3392; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_3: 3393; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 3394; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lhu a2, 0(a0) 3395; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lbu a0, 2(a0) 3396; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lhu a3, 0(a1) 3397; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lbu a1, 2(a1) 3398; CHECK-UNALIGNED-RV32-ZBKB-NEXT: pack a0, a2, a0 3399; CHECK-UNALIGNED-RV32-ZBKB-NEXT: pack a1, a3, a1 3400; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a0, a0 3401; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a1, a1 3402; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a2, a0, a1 3403; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a1, a0 3404; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sub a0, a0, a2 3405; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 3406; 3407; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_3: 3408; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 3409; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lbu a2, 2(a0) 3410; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lhu a0, 0(a0) 3411; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lbu a3, 2(a1) 3412; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lhu a1, 0(a1) 3413; CHECK-UNALIGNED-RV64-ZBKB-NEXT: slli a2, a2, 16 3414; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a0, a0, a2 3415; CHECK-UNALIGNED-RV64-ZBKB-NEXT: slli a3, a3, 16 3416; CHECK-UNALIGNED-RV64-ZBKB-NEXT: or a1, a1, a3 3417; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 3418; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 3419; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a0, a0, 32 3420; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a1, a1, 32 3421; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a2, a0, a1 3422; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a1, a0 3423; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sub a0, a0, a2 3424; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 3425; 3426; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_3: 3427; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 3428; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 3429; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3430; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 3 3431; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 3432; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3433; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 3434; CHECK-UNALIGNED-RV32-V-NEXT: ret 3435; 3436; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_3: 3437; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 3438; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 3439; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3440; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 3 3441; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 3442; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3443; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 3444; CHECK-UNALIGNED-RV64-V-NEXT: ret 3445entry: 3446 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 3) 3447 ret i32 %memcmp 3448} 3449 3450define i32 @memcmp_size_4(ptr %s1, ptr %s2) nounwind { 3451; CHECK-ALIGNED-RV32-LABEL: memcmp_size_4: 3452; CHECK-ALIGNED-RV32: # %bb.0: # %entry 3453; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 3454; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3455; CHECK-ALIGNED-RV32-NEXT: li a2, 4 3456; CHECK-ALIGNED-RV32-NEXT: call memcmp 3457; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3458; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 3459; CHECK-ALIGNED-RV32-NEXT: ret 3460; 3461; CHECK-ALIGNED-RV64-LABEL: memcmp_size_4: 3462; CHECK-ALIGNED-RV64: # %bb.0: # %entry 3463; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 3464; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3465; CHECK-ALIGNED-RV64-NEXT: li a2, 4 3466; CHECK-ALIGNED-RV64-NEXT: call memcmp 3467; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3468; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 3469; CHECK-ALIGNED-RV64-NEXT: ret 3470; 3471; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_4: 3472; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 3473; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 3474; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3475; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 3476; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 3477; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3478; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 3479; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 3480; 3481; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_4: 3482; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 3483; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 3484; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3485; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 3486; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 3487; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3488; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 3489; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 3490; 3491; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_4: 3492; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 3493; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 3494; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3495; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 3496; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 3497; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3498; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 3499; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 3500; 3501; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_4: 3502; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 3503; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 3504; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3505; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 3506; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 3507; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3508; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 3509; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 3510; 3511; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_4: 3512; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 3513; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 3514; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3515; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 3516; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 3517; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3518; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 3519; CHECK-ALIGNED-RV32-V-NEXT: ret 3520; 3521; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_4: 3522; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 3523; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 3524; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3525; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 3526; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 3527; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3528; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 3529; CHECK-ALIGNED-RV64-V-NEXT: ret 3530; 3531; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_4: 3532; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 3533; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 3534; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3535; CHECK-UNALIGNED-RV32-NEXT: li a2, 4 3536; CHECK-UNALIGNED-RV32-NEXT: call memcmp 3537; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3538; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 3539; CHECK-UNALIGNED-RV32-NEXT: ret 3540; 3541; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_4: 3542; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 3543; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 3544; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3545; CHECK-UNALIGNED-RV64-NEXT: li a2, 4 3546; CHECK-UNALIGNED-RV64-NEXT: call memcmp 3547; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3548; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 3549; CHECK-UNALIGNED-RV64-NEXT: ret 3550; 3551; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_4: 3552; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 3553; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 0(a0) 3554; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 0(a1) 3555; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a0, a0 3556; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a1, a1 3557; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a2, a0, a1 3558; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a1, a0 3559; CHECK-UNALIGNED-RV32-ZBB-NEXT: sub a0, a0, a2 3560; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 3561; 3562; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_4: 3563; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 3564; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a0, 0(a0) 3565; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a1, 0(a1) 3566; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 3567; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 3568; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a0, a0, 32 3569; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a1, a1, 32 3570; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a2, a0, a1 3571; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a1, a0 3572; CHECK-UNALIGNED-RV64-ZBB-NEXT: sub a0, a0, a2 3573; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 3574; 3575; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_4: 3576; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 3577; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 0(a0) 3578; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 0(a1) 3579; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a0, a0 3580; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a1, a1 3581; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a2, a0, a1 3582; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a1, a0 3583; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sub a0, a0, a2 3584; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 3585; 3586; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_4: 3587; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 3588; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a0, 0(a0) 3589; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a1, 0(a1) 3590; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 3591; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 3592; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a0, a0, 32 3593; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a1, a1, 32 3594; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a2, a0, a1 3595; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a1, a0 3596; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sub a0, a0, a2 3597; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 3598; 3599; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_4: 3600; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 3601; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 3602; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3603; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 4 3604; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 3605; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3606; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 3607; CHECK-UNALIGNED-RV32-V-NEXT: ret 3608; 3609; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_4: 3610; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 3611; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 3612; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3613; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 4 3614; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 3615; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3616; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 3617; CHECK-UNALIGNED-RV64-V-NEXT: ret 3618entry: 3619 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4) 3620 ret i32 %memcmp 3621} 3622 3623define i32 @memcmp_size_5(ptr %s1, ptr %s2) nounwind { 3624; CHECK-ALIGNED-RV32-LABEL: memcmp_size_5: 3625; CHECK-ALIGNED-RV32: # %bb.0: # %entry 3626; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 3627; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3628; CHECK-ALIGNED-RV32-NEXT: li a2, 5 3629; CHECK-ALIGNED-RV32-NEXT: call memcmp 3630; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3631; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 3632; CHECK-ALIGNED-RV32-NEXT: ret 3633; 3634; CHECK-ALIGNED-RV64-LABEL: memcmp_size_5: 3635; CHECK-ALIGNED-RV64: # %bb.0: # %entry 3636; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 3637; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3638; CHECK-ALIGNED-RV64-NEXT: li a2, 5 3639; CHECK-ALIGNED-RV64-NEXT: call memcmp 3640; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3641; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 3642; CHECK-ALIGNED-RV64-NEXT: ret 3643; 3644; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_5: 3645; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 3646; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 3647; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3648; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 5 3649; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 3650; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3651; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 3652; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 3653; 3654; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_5: 3655; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 3656; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 3657; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3658; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 5 3659; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 3660; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3661; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 3662; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 3663; 3664; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_5: 3665; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 3666; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 3667; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3668; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 5 3669; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 3670; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3671; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 3672; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 3673; 3674; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_5: 3675; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 3676; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 3677; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3678; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 5 3679; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 3680; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3681; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 3682; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 3683; 3684; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_5: 3685; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 3686; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 3687; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3688; CHECK-ALIGNED-RV32-V-NEXT: li a2, 5 3689; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 3690; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3691; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 3692; CHECK-ALIGNED-RV32-V-NEXT: ret 3693; 3694; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_5: 3695; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 3696; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 3697; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3698; CHECK-ALIGNED-RV64-V-NEXT: li a2, 5 3699; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 3700; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3701; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 3702; CHECK-ALIGNED-RV64-V-NEXT: ret 3703; 3704; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_5: 3705; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 3706; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 3707; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3708; CHECK-UNALIGNED-RV32-NEXT: li a2, 5 3709; CHECK-UNALIGNED-RV32-NEXT: call memcmp 3710; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3711; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 3712; CHECK-UNALIGNED-RV32-NEXT: ret 3713; 3714; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_5: 3715; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 3716; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 3717; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3718; CHECK-UNALIGNED-RV64-NEXT: li a2, 5 3719; CHECK-UNALIGNED-RV64-NEXT: call memcmp 3720; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3721; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 3722; CHECK-UNALIGNED-RV64-NEXT: ret 3723; 3724; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_5: 3725; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 3726; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 3727; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 3728; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 3729; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 3730; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB28_2 3731; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.1: # %loadbb1 3732; CHECK-UNALIGNED-RV32-ZBB-NEXT: lbu a0, 4(a0) 3733; CHECK-UNALIGNED-RV32-ZBB-NEXT: lbu a1, 4(a1) 3734; CHECK-UNALIGNED-RV32-ZBB-NEXT: sub a0, a0, a1 3735; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 3736; CHECK-UNALIGNED-RV32-ZBB-NEXT: .LBB28_2: # %res_block 3737; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a2, a3 3738; CHECK-UNALIGNED-RV32-ZBB-NEXT: neg a0, a0 3739; CHECK-UNALIGNED-RV32-ZBB-NEXT: ori a0, a0, 1 3740; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 3741; 3742; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_5: 3743; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 3744; CHECK-UNALIGNED-RV64-ZBB-NEXT: lbu a2, 4(a0) 3745; CHECK-UNALIGNED-RV64-ZBB-NEXT: lwu a0, 0(a0) 3746; CHECK-UNALIGNED-RV64-ZBB-NEXT: lbu a3, 4(a1) 3747; CHECK-UNALIGNED-RV64-ZBB-NEXT: lwu a1, 0(a1) 3748; CHECK-UNALIGNED-RV64-ZBB-NEXT: slli a2, a2, 32 3749; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a0, a2 3750; CHECK-UNALIGNED-RV64-ZBB-NEXT: slli a3, a3, 32 3751; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a1, a1, a3 3752; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 3753; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 3754; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a2, a0, a1 3755; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a1, a0 3756; CHECK-UNALIGNED-RV64-ZBB-NEXT: sub a0, a0, a2 3757; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 3758; 3759; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_5: 3760; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 3761; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 3762; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 3763; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 3764; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 3765; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB28_2 3766; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.1: # %loadbb1 3767; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lbu a0, 4(a0) 3768; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lbu a1, 4(a1) 3769; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sub a0, a0, a1 3770; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 3771; CHECK-UNALIGNED-RV32-ZBKB-NEXT: .LBB28_2: # %res_block 3772; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a2, a3 3773; CHECK-UNALIGNED-RV32-ZBKB-NEXT: neg a0, a0 3774; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ori a0, a0, 1 3775; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 3776; 3777; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_5: 3778; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 3779; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lwu a2, 0(a0) 3780; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lbu a0, 4(a0) 3781; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lwu a3, 0(a1) 3782; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lbu a1, 4(a1) 3783; CHECK-UNALIGNED-RV64-ZBKB-NEXT: pack a0, a2, a0 3784; CHECK-UNALIGNED-RV64-ZBKB-NEXT: pack a1, a3, a1 3785; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 3786; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 3787; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a2, a0, a1 3788; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a1, a0 3789; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sub a0, a0, a2 3790; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 3791; 3792; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_5: 3793; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 3794; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 3795; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3796; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 5 3797; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 3798; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3799; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 3800; CHECK-UNALIGNED-RV32-V-NEXT: ret 3801; 3802; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_5: 3803; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 3804; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 3805; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3806; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 5 3807; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 3808; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3809; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 3810; CHECK-UNALIGNED-RV64-V-NEXT: ret 3811entry: 3812 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 5) 3813 ret i32 %memcmp 3814} 3815 3816define i32 @memcmp_size_6(ptr %s1, ptr %s2) nounwind { 3817; CHECK-ALIGNED-RV32-LABEL: memcmp_size_6: 3818; CHECK-ALIGNED-RV32: # %bb.0: # %entry 3819; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 3820; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3821; CHECK-ALIGNED-RV32-NEXT: li a2, 6 3822; CHECK-ALIGNED-RV32-NEXT: call memcmp 3823; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3824; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 3825; CHECK-ALIGNED-RV32-NEXT: ret 3826; 3827; CHECK-ALIGNED-RV64-LABEL: memcmp_size_6: 3828; CHECK-ALIGNED-RV64: # %bb.0: # %entry 3829; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 3830; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3831; CHECK-ALIGNED-RV64-NEXT: li a2, 6 3832; CHECK-ALIGNED-RV64-NEXT: call memcmp 3833; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3834; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 3835; CHECK-ALIGNED-RV64-NEXT: ret 3836; 3837; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_6: 3838; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 3839; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 3840; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3841; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 6 3842; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 3843; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3844; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 3845; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 3846; 3847; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_6: 3848; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 3849; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 3850; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3851; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 6 3852; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 3853; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3854; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 3855; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 3856; 3857; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_6: 3858; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 3859; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 3860; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3861; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 6 3862; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 3863; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3864; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 3865; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 3866; 3867; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_6: 3868; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 3869; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 3870; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3871; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 6 3872; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 3873; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3874; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 3875; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 3876; 3877; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_6: 3878; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 3879; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 3880; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3881; CHECK-ALIGNED-RV32-V-NEXT: li a2, 6 3882; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 3883; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3884; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 3885; CHECK-ALIGNED-RV32-V-NEXT: ret 3886; 3887; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_6: 3888; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 3889; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 3890; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3891; CHECK-ALIGNED-RV64-V-NEXT: li a2, 6 3892; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 3893; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3894; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 3895; CHECK-ALIGNED-RV64-V-NEXT: ret 3896; 3897; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_6: 3898; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 3899; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 3900; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 3901; CHECK-UNALIGNED-RV32-NEXT: li a2, 6 3902; CHECK-UNALIGNED-RV32-NEXT: call memcmp 3903; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 3904; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 3905; CHECK-UNALIGNED-RV32-NEXT: ret 3906; 3907; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_6: 3908; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 3909; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 3910; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 3911; CHECK-UNALIGNED-RV64-NEXT: li a2, 6 3912; CHECK-UNALIGNED-RV64-NEXT: call memcmp 3913; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 3914; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 3915; CHECK-UNALIGNED-RV64-NEXT: ret 3916; 3917; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_6: 3918; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 3919; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 3920; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 3921; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 3922; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 3923; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB29_3 3924; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.1: # %loadbb1 3925; CHECK-UNALIGNED-RV32-ZBB-NEXT: lh a0, 4(a0) 3926; CHECK-UNALIGNED-RV32-ZBB-NEXT: lh a1, 4(a1) 3927; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a0 3928; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a1 3929; CHECK-UNALIGNED-RV32-ZBB-NEXT: srli a2, a2, 16 3930; CHECK-UNALIGNED-RV32-ZBB-NEXT: srli a3, a3, 16 3931; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB29_3 3932; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.2: 3933; CHECK-UNALIGNED-RV32-ZBB-NEXT: li a0, 0 3934; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 3935; CHECK-UNALIGNED-RV32-ZBB-NEXT: .LBB29_3: # %res_block 3936; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a2, a3 3937; CHECK-UNALIGNED-RV32-ZBB-NEXT: neg a0, a0 3938; CHECK-UNALIGNED-RV32-ZBB-NEXT: ori a0, a0, 1 3939; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 3940; 3941; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_6: 3942; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 3943; CHECK-UNALIGNED-RV64-ZBB-NEXT: lhu a2, 4(a0) 3944; CHECK-UNALIGNED-RV64-ZBB-NEXT: lwu a0, 0(a0) 3945; CHECK-UNALIGNED-RV64-ZBB-NEXT: lhu a3, 4(a1) 3946; CHECK-UNALIGNED-RV64-ZBB-NEXT: lwu a1, 0(a1) 3947; CHECK-UNALIGNED-RV64-ZBB-NEXT: slli a2, a2, 32 3948; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a0, a0, a2 3949; CHECK-UNALIGNED-RV64-ZBB-NEXT: slli a3, a3, 32 3950; CHECK-UNALIGNED-RV64-ZBB-NEXT: or a1, a1, a3 3951; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 3952; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 3953; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a2, a0, a1 3954; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a1, a0 3955; CHECK-UNALIGNED-RV64-ZBB-NEXT: sub a0, a0, a2 3956; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 3957; 3958; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_6: 3959; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 3960; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 3961; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 3962; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 3963; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 3964; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB29_3 3965; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.1: # %loadbb1 3966; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lh a0, 4(a0) 3967; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lh a1, 4(a1) 3968; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a0 3969; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a1 3970; CHECK-UNALIGNED-RV32-ZBKB-NEXT: srli a2, a2, 16 3971; CHECK-UNALIGNED-RV32-ZBKB-NEXT: srli a3, a3, 16 3972; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB29_3 3973; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.2: 3974; CHECK-UNALIGNED-RV32-ZBKB-NEXT: li a0, 0 3975; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 3976; CHECK-UNALIGNED-RV32-ZBKB-NEXT: .LBB29_3: # %res_block 3977; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a2, a3 3978; CHECK-UNALIGNED-RV32-ZBKB-NEXT: neg a0, a0 3979; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ori a0, a0, 1 3980; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 3981; 3982; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_6: 3983; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 3984; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lwu a2, 0(a0) 3985; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lhu a0, 4(a0) 3986; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lwu a3, 0(a1) 3987; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lhu a1, 4(a1) 3988; CHECK-UNALIGNED-RV64-ZBKB-NEXT: pack a0, a2, a0 3989; CHECK-UNALIGNED-RV64-ZBKB-NEXT: pack a1, a3, a1 3990; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 3991; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 3992; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a2, a0, a1 3993; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a1, a0 3994; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sub a0, a0, a2 3995; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 3996; 3997; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_6: 3998; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 3999; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 4000; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4001; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 6 4002; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 4003; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4004; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 4005; CHECK-UNALIGNED-RV32-V-NEXT: ret 4006; 4007; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_6: 4008; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 4009; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 4010; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4011; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 6 4012; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 4013; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4014; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 4015; CHECK-UNALIGNED-RV64-V-NEXT: ret 4016entry: 4017 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 6) 4018 ret i32 %memcmp 4019} 4020 4021define i32 @memcmp_size_7(ptr %s1, ptr %s2) nounwind { 4022; CHECK-ALIGNED-RV32-LABEL: memcmp_size_7: 4023; CHECK-ALIGNED-RV32: # %bb.0: # %entry 4024; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 4025; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4026; CHECK-ALIGNED-RV32-NEXT: li a2, 7 4027; CHECK-ALIGNED-RV32-NEXT: call memcmp 4028; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4029; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 4030; CHECK-ALIGNED-RV32-NEXT: ret 4031; 4032; CHECK-ALIGNED-RV64-LABEL: memcmp_size_7: 4033; CHECK-ALIGNED-RV64: # %bb.0: # %entry 4034; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 4035; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4036; CHECK-ALIGNED-RV64-NEXT: li a2, 7 4037; CHECK-ALIGNED-RV64-NEXT: call memcmp 4038; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4039; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 4040; CHECK-ALIGNED-RV64-NEXT: ret 4041; 4042; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_7: 4043; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 4044; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 4045; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4046; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 7 4047; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 4048; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4049; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 4050; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 4051; 4052; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_7: 4053; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 4054; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 4055; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4056; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 7 4057; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 4058; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4059; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 4060; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 4061; 4062; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_7: 4063; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 4064; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 4065; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4066; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 7 4067; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 4068; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4069; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 4070; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 4071; 4072; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_7: 4073; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 4074; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 4075; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4076; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 7 4077; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 4078; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4079; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 4080; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 4081; 4082; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_7: 4083; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 4084; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 4085; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4086; CHECK-ALIGNED-RV32-V-NEXT: li a2, 7 4087; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 4088; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4089; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 4090; CHECK-ALIGNED-RV32-V-NEXT: ret 4091; 4092; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_7: 4093; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 4094; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 4095; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4096; CHECK-ALIGNED-RV64-V-NEXT: li a2, 7 4097; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 4098; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4099; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 4100; CHECK-ALIGNED-RV64-V-NEXT: ret 4101; 4102; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_7: 4103; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 4104; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 4105; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4106; CHECK-UNALIGNED-RV32-NEXT: li a2, 7 4107; CHECK-UNALIGNED-RV32-NEXT: call memcmp 4108; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4109; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 4110; CHECK-UNALIGNED-RV32-NEXT: ret 4111; 4112; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_7: 4113; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 4114; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 4115; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4116; CHECK-UNALIGNED-RV64-NEXT: li a2, 7 4117; CHECK-UNALIGNED-RV64-NEXT: call memcmp 4118; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4119; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 4120; CHECK-UNALIGNED-RV64-NEXT: ret 4121; 4122; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_7: 4123; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 4124; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 4125; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 4126; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 4127; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 4128; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB30_3 4129; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.1: # %loadbb1 4130; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 3(a0) 4131; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 3(a1) 4132; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a0 4133; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a1 4134; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB30_3 4135; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.2: 4136; CHECK-UNALIGNED-RV32-ZBB-NEXT: li a0, 0 4137; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 4138; CHECK-UNALIGNED-RV32-ZBB-NEXT: .LBB30_3: # %res_block 4139; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a2, a3 4140; CHECK-UNALIGNED-RV32-ZBB-NEXT: neg a0, a0 4141; CHECK-UNALIGNED-RV32-ZBB-NEXT: ori a0, a0, 1 4142; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 4143; 4144; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_7: 4145; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 4146; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a2, 0(a0) 4147; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a3, 0(a1) 4148; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 4149; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 4150; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a2, a2, 32 4151; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a3, a3, 32 4152; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB30_3 4153; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.1: # %loadbb1 4154; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a0, 3(a0) 4155; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a1, 3(a1) 4156; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a0 4157; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a1 4158; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a2, a2, 32 4159; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a3, a3, 32 4160; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB30_3 4161; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.2: 4162; CHECK-UNALIGNED-RV64-ZBB-NEXT: li a0, 0 4163; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 4164; CHECK-UNALIGNED-RV64-ZBB-NEXT: .LBB30_3: # %res_block 4165; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a2, a3 4166; CHECK-UNALIGNED-RV64-ZBB-NEXT: neg a0, a0 4167; CHECK-UNALIGNED-RV64-ZBB-NEXT: ori a0, a0, 1 4168; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 4169; 4170; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_7: 4171; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 4172; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 4173; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 4174; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 4175; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 4176; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB30_3 4177; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.1: # %loadbb1 4178; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 3(a0) 4179; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 3(a1) 4180; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a0 4181; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a1 4182; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB30_3 4183; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.2: 4184; CHECK-UNALIGNED-RV32-ZBKB-NEXT: li a0, 0 4185; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 4186; CHECK-UNALIGNED-RV32-ZBKB-NEXT: .LBB30_3: # %res_block 4187; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a2, a3 4188; CHECK-UNALIGNED-RV32-ZBKB-NEXT: neg a0, a0 4189; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ori a0, a0, 1 4190; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 4191; 4192; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_7: 4193; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 4194; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a2, 0(a0) 4195; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a3, 0(a1) 4196; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 4197; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 4198; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a2, a2, 32 4199; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a3, a3, 32 4200; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB30_3 4201; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.1: # %loadbb1 4202; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a0, 3(a0) 4203; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a1, 3(a1) 4204; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a0 4205; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a1 4206; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a2, a2, 32 4207; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a3, a3, 32 4208; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB30_3 4209; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.2: 4210; CHECK-UNALIGNED-RV64-ZBKB-NEXT: li a0, 0 4211; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 4212; CHECK-UNALIGNED-RV64-ZBKB-NEXT: .LBB30_3: # %res_block 4213; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a2, a3 4214; CHECK-UNALIGNED-RV64-ZBKB-NEXT: neg a0, a0 4215; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ori a0, a0, 1 4216; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 4217; 4218; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_7: 4219; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 4220; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 4221; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4222; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 7 4223; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 4224; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4225; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 4226; CHECK-UNALIGNED-RV32-V-NEXT: ret 4227; 4228; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_7: 4229; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 4230; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 4231; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4232; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 7 4233; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 4234; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4235; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 4236; CHECK-UNALIGNED-RV64-V-NEXT: ret 4237entry: 4238 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 7) 4239 ret i32 %memcmp 4240} 4241 4242define i32 @memcmp_size_8(ptr %s1, ptr %s2) nounwind { 4243; CHECK-ALIGNED-RV32-LABEL: memcmp_size_8: 4244; CHECK-ALIGNED-RV32: # %bb.0: # %entry 4245; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 4246; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4247; CHECK-ALIGNED-RV32-NEXT: li a2, 8 4248; CHECK-ALIGNED-RV32-NEXT: call memcmp 4249; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4250; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 4251; CHECK-ALIGNED-RV32-NEXT: ret 4252; 4253; CHECK-ALIGNED-RV64-LABEL: memcmp_size_8: 4254; CHECK-ALIGNED-RV64: # %bb.0: # %entry 4255; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 4256; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4257; CHECK-ALIGNED-RV64-NEXT: li a2, 8 4258; CHECK-ALIGNED-RV64-NEXT: call memcmp 4259; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4260; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 4261; CHECK-ALIGNED-RV64-NEXT: ret 4262; 4263; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_8: 4264; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 4265; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 4266; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4267; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 8 4268; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 4269; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4270; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 4271; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 4272; 4273; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_8: 4274; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 4275; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 4276; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4277; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 8 4278; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 4279; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4280; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 4281; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 4282; 4283; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_8: 4284; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 4285; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 4286; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4287; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 8 4288; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 4289; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4290; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 4291; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 4292; 4293; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_8: 4294; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 4295; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 4296; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4297; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 8 4298; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 4299; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4300; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 4301; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 4302; 4303; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_8: 4304; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 4305; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 4306; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4307; CHECK-ALIGNED-RV32-V-NEXT: li a2, 8 4308; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 4309; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4310; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 4311; CHECK-ALIGNED-RV32-V-NEXT: ret 4312; 4313; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_8: 4314; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 4315; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 4316; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4317; CHECK-ALIGNED-RV64-V-NEXT: li a2, 8 4318; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 4319; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4320; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 4321; CHECK-ALIGNED-RV64-V-NEXT: ret 4322; 4323; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_8: 4324; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 4325; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 4326; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4327; CHECK-UNALIGNED-RV32-NEXT: li a2, 8 4328; CHECK-UNALIGNED-RV32-NEXT: call memcmp 4329; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4330; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 4331; CHECK-UNALIGNED-RV32-NEXT: ret 4332; 4333; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_8: 4334; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 4335; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 4336; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4337; CHECK-UNALIGNED-RV64-NEXT: li a2, 8 4338; CHECK-UNALIGNED-RV64-NEXT: call memcmp 4339; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4340; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 4341; CHECK-UNALIGNED-RV64-NEXT: ret 4342; 4343; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_8: 4344; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 4345; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 4346; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 4347; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 4348; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 4349; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB31_3 4350; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.1: # %loadbb1 4351; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 4(a0) 4352; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 4(a1) 4353; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a0 4354; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a1 4355; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB31_3 4356; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.2: 4357; CHECK-UNALIGNED-RV32-ZBB-NEXT: li a0, 0 4358; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 4359; CHECK-UNALIGNED-RV32-ZBB-NEXT: .LBB31_3: # %res_block 4360; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a2, a3 4361; CHECK-UNALIGNED-RV32-ZBB-NEXT: neg a0, a0 4362; CHECK-UNALIGNED-RV32-ZBB-NEXT: ori a0, a0, 1 4363; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 4364; 4365; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_8: 4366; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 4367; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 0(a0) 4368; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 0(a1) 4369; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 4370; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 4371; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a2, a0, a1 4372; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a1, a0 4373; CHECK-UNALIGNED-RV64-ZBB-NEXT: sub a0, a0, a2 4374; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 4375; 4376; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_8: 4377; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 4378; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 4379; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 4380; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 4381; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 4382; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB31_3 4383; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.1: # %loadbb1 4384; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 4(a0) 4385; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 4(a1) 4386; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a0 4387; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a1 4388; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB31_3 4389; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.2: 4390; CHECK-UNALIGNED-RV32-ZBKB-NEXT: li a0, 0 4391; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 4392; CHECK-UNALIGNED-RV32-ZBKB-NEXT: .LBB31_3: # %res_block 4393; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a2, a3 4394; CHECK-UNALIGNED-RV32-ZBKB-NEXT: neg a0, a0 4395; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ori a0, a0, 1 4396; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 4397; 4398; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_8: 4399; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 4400; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 0(a0) 4401; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 0(a1) 4402; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 4403; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 4404; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a2, a0, a1 4405; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a1, a0 4406; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sub a0, a0, a2 4407; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 4408; 4409; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_8: 4410; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 4411; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 4412; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4413; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 8 4414; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 4415; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4416; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 4417; CHECK-UNALIGNED-RV32-V-NEXT: ret 4418; 4419; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_8: 4420; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 4421; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 4422; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4423; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 8 4424; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 4425; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4426; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 4427; CHECK-UNALIGNED-RV64-V-NEXT: ret 4428entry: 4429 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 8) 4430 ret i32 %memcmp 4431} 4432 4433define i32 @memcmp_size_15(ptr %s1, ptr %s2) nounwind { 4434; CHECK-ALIGNED-RV32-LABEL: memcmp_size_15: 4435; CHECK-ALIGNED-RV32: # %bb.0: # %entry 4436; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 4437; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4438; CHECK-ALIGNED-RV32-NEXT: li a2, 15 4439; CHECK-ALIGNED-RV32-NEXT: call memcmp 4440; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4441; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 4442; CHECK-ALIGNED-RV32-NEXT: ret 4443; 4444; CHECK-ALIGNED-RV64-LABEL: memcmp_size_15: 4445; CHECK-ALIGNED-RV64: # %bb.0: # %entry 4446; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 4447; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4448; CHECK-ALIGNED-RV64-NEXT: li a2, 15 4449; CHECK-ALIGNED-RV64-NEXT: call memcmp 4450; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4451; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 4452; CHECK-ALIGNED-RV64-NEXT: ret 4453; 4454; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_15: 4455; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 4456; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 4457; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4458; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 15 4459; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 4460; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4461; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 4462; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 4463; 4464; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_15: 4465; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 4466; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 4467; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4468; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 15 4469; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 4470; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4471; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 4472; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 4473; 4474; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_15: 4475; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 4476; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 4477; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4478; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 15 4479; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 4480; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4481; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 4482; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 4483; 4484; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_15: 4485; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 4486; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 4487; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4488; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 15 4489; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 4490; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4491; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 4492; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 4493; 4494; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_15: 4495; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 4496; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 4497; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4498; CHECK-ALIGNED-RV32-V-NEXT: li a2, 15 4499; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 4500; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4501; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 4502; CHECK-ALIGNED-RV32-V-NEXT: ret 4503; 4504; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_15: 4505; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 4506; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 4507; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4508; CHECK-ALIGNED-RV64-V-NEXT: li a2, 15 4509; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 4510; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4511; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 4512; CHECK-ALIGNED-RV64-V-NEXT: ret 4513; 4514; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_15: 4515; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 4516; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 4517; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4518; CHECK-UNALIGNED-RV32-NEXT: li a2, 15 4519; CHECK-UNALIGNED-RV32-NEXT: call memcmp 4520; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4521; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 4522; CHECK-UNALIGNED-RV32-NEXT: ret 4523; 4524; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_15: 4525; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 4526; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 4527; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4528; CHECK-UNALIGNED-RV64-NEXT: li a2, 15 4529; CHECK-UNALIGNED-RV64-NEXT: call memcmp 4530; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4531; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 4532; CHECK-UNALIGNED-RV64-NEXT: ret 4533; 4534; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_15: 4535; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 4536; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 4537; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 4538; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 4539; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 4540; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB32_5 4541; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.1: # %loadbb1 4542; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 4(a0) 4543; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 4(a1) 4544; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 4545; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 4546; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB32_5 4547; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.2: # %loadbb2 4548; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 8(a0) 4549; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 8(a1) 4550; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 4551; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 4552; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB32_5 4553; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.3: # %loadbb3 4554; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 11(a0) 4555; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 11(a1) 4556; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a0 4557; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a1 4558; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB32_5 4559; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.4: 4560; CHECK-UNALIGNED-RV32-ZBB-NEXT: li a0, 0 4561; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 4562; CHECK-UNALIGNED-RV32-ZBB-NEXT: .LBB32_5: # %res_block 4563; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a2, a3 4564; CHECK-UNALIGNED-RV32-ZBB-NEXT: neg a0, a0 4565; CHECK-UNALIGNED-RV32-ZBB-NEXT: ori a0, a0, 1 4566; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 4567; 4568; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_15: 4569; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 4570; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 4571; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 0(a1) 4572; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 4573; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 4574; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB32_3 4575; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.1: # %loadbb1 4576; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 7(a0) 4577; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 7(a1) 4578; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a0 4579; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a1 4580; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB32_3 4581; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.2: 4582; CHECK-UNALIGNED-RV64-ZBB-NEXT: li a0, 0 4583; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 4584; CHECK-UNALIGNED-RV64-ZBB-NEXT: .LBB32_3: # %res_block 4585; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a2, a3 4586; CHECK-UNALIGNED-RV64-ZBB-NEXT: neg a0, a0 4587; CHECK-UNALIGNED-RV64-ZBB-NEXT: ori a0, a0, 1 4588; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 4589; 4590; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_15: 4591; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 4592; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 4593; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 4594; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 4595; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 4596; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB32_5 4597; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.1: # %loadbb1 4598; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 4(a0) 4599; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 4(a1) 4600; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 4601; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 4602; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB32_5 4603; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.2: # %loadbb2 4604; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 8(a0) 4605; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 8(a1) 4606; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 4607; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 4608; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB32_5 4609; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.3: # %loadbb3 4610; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 11(a0) 4611; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 11(a1) 4612; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a0 4613; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a1 4614; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB32_5 4615; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.4: 4616; CHECK-UNALIGNED-RV32-ZBKB-NEXT: li a0, 0 4617; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 4618; CHECK-UNALIGNED-RV32-ZBKB-NEXT: .LBB32_5: # %res_block 4619; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a2, a3 4620; CHECK-UNALIGNED-RV32-ZBKB-NEXT: neg a0, a0 4621; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ori a0, a0, 1 4622; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 4623; 4624; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_15: 4625; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 4626; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 4627; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 0(a1) 4628; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 4629; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 4630; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB32_3 4631; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.1: # %loadbb1 4632; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 7(a0) 4633; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 7(a1) 4634; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a0 4635; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a1 4636; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB32_3 4637; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.2: 4638; CHECK-UNALIGNED-RV64-ZBKB-NEXT: li a0, 0 4639; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 4640; CHECK-UNALIGNED-RV64-ZBKB-NEXT: .LBB32_3: # %res_block 4641; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a2, a3 4642; CHECK-UNALIGNED-RV64-ZBKB-NEXT: neg a0, a0 4643; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ori a0, a0, 1 4644; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 4645; 4646; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_15: 4647; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 4648; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 4649; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4650; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 15 4651; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 4652; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4653; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 4654; CHECK-UNALIGNED-RV32-V-NEXT: ret 4655; 4656; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_15: 4657; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 4658; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 4659; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4660; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 15 4661; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 4662; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4663; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 4664; CHECK-UNALIGNED-RV64-V-NEXT: ret 4665entry: 4666 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 15) 4667 ret i32 %memcmp 4668} 4669 4670define i32 @memcmp_size_16(ptr %s1, ptr %s2) nounwind { 4671; CHECK-ALIGNED-RV32-LABEL: memcmp_size_16: 4672; CHECK-ALIGNED-RV32: # %bb.0: # %entry 4673; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 4674; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4675; CHECK-ALIGNED-RV32-NEXT: li a2, 16 4676; CHECK-ALIGNED-RV32-NEXT: call memcmp 4677; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4678; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 4679; CHECK-ALIGNED-RV32-NEXT: ret 4680; 4681; CHECK-ALIGNED-RV64-LABEL: memcmp_size_16: 4682; CHECK-ALIGNED-RV64: # %bb.0: # %entry 4683; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 4684; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4685; CHECK-ALIGNED-RV64-NEXT: li a2, 16 4686; CHECK-ALIGNED-RV64-NEXT: call memcmp 4687; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4688; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 4689; CHECK-ALIGNED-RV64-NEXT: ret 4690; 4691; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_16: 4692; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 4693; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 4694; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4695; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 16 4696; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 4697; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4698; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 4699; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 4700; 4701; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_16: 4702; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 4703; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 4704; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4705; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 16 4706; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 4707; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4708; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 4709; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 4710; 4711; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_16: 4712; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 4713; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 4714; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4715; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 16 4716; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 4717; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4718; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 4719; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 4720; 4721; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_16: 4722; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 4723; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 4724; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4725; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 16 4726; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 4727; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4728; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 4729; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 4730; 4731; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_16: 4732; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 4733; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 4734; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4735; CHECK-ALIGNED-RV32-V-NEXT: li a2, 16 4736; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 4737; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4738; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 4739; CHECK-ALIGNED-RV32-V-NEXT: ret 4740; 4741; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_16: 4742; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 4743; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 4744; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4745; CHECK-ALIGNED-RV64-V-NEXT: li a2, 16 4746; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 4747; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4748; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 4749; CHECK-ALIGNED-RV64-V-NEXT: ret 4750; 4751; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_16: 4752; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 4753; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 4754; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4755; CHECK-UNALIGNED-RV32-NEXT: li a2, 16 4756; CHECK-UNALIGNED-RV32-NEXT: call memcmp 4757; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4758; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 4759; CHECK-UNALIGNED-RV32-NEXT: ret 4760; 4761; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_16: 4762; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 4763; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 4764; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4765; CHECK-UNALIGNED-RV64-NEXT: li a2, 16 4766; CHECK-UNALIGNED-RV64-NEXT: call memcmp 4767; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4768; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 4769; CHECK-UNALIGNED-RV64-NEXT: ret 4770; 4771; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_16: 4772; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 4773; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 4774; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 4775; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 4776; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 4777; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB33_5 4778; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.1: # %loadbb1 4779; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 4(a0) 4780; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 4(a1) 4781; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 4782; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 4783; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB33_5 4784; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.2: # %loadbb2 4785; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 8(a0) 4786; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 8(a1) 4787; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 4788; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 4789; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB33_5 4790; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.3: # %loadbb3 4791; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 12(a0) 4792; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 12(a1) 4793; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a0 4794; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a1 4795; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB33_5 4796; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.4: 4797; CHECK-UNALIGNED-RV32-ZBB-NEXT: li a0, 0 4798; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 4799; CHECK-UNALIGNED-RV32-ZBB-NEXT: .LBB33_5: # %res_block 4800; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a2, a3 4801; CHECK-UNALIGNED-RV32-ZBB-NEXT: neg a0, a0 4802; CHECK-UNALIGNED-RV32-ZBB-NEXT: ori a0, a0, 1 4803; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 4804; 4805; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_16: 4806; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 4807; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 4808; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 0(a1) 4809; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 4810; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 4811; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB33_3 4812; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.1: # %loadbb1 4813; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 8(a0) 4814; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 8(a1) 4815; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a0 4816; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a1 4817; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB33_3 4818; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.2: 4819; CHECK-UNALIGNED-RV64-ZBB-NEXT: li a0, 0 4820; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 4821; CHECK-UNALIGNED-RV64-ZBB-NEXT: .LBB33_3: # %res_block 4822; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a2, a3 4823; CHECK-UNALIGNED-RV64-ZBB-NEXT: neg a0, a0 4824; CHECK-UNALIGNED-RV64-ZBB-NEXT: ori a0, a0, 1 4825; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 4826; 4827; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_16: 4828; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 4829; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 4830; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 4831; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 4832; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 4833; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB33_5 4834; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.1: # %loadbb1 4835; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 4(a0) 4836; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 4(a1) 4837; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 4838; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 4839; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB33_5 4840; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.2: # %loadbb2 4841; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 8(a0) 4842; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 8(a1) 4843; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 4844; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 4845; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB33_5 4846; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.3: # %loadbb3 4847; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 12(a0) 4848; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 12(a1) 4849; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a0 4850; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a1 4851; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB33_5 4852; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.4: 4853; CHECK-UNALIGNED-RV32-ZBKB-NEXT: li a0, 0 4854; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 4855; CHECK-UNALIGNED-RV32-ZBKB-NEXT: .LBB33_5: # %res_block 4856; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a2, a3 4857; CHECK-UNALIGNED-RV32-ZBKB-NEXT: neg a0, a0 4858; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ori a0, a0, 1 4859; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 4860; 4861; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_16: 4862; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 4863; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 4864; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 0(a1) 4865; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 4866; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 4867; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB33_3 4868; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.1: # %loadbb1 4869; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 8(a0) 4870; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 8(a1) 4871; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a0 4872; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a1 4873; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB33_3 4874; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.2: 4875; CHECK-UNALIGNED-RV64-ZBKB-NEXT: li a0, 0 4876; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 4877; CHECK-UNALIGNED-RV64-ZBKB-NEXT: .LBB33_3: # %res_block 4878; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a2, a3 4879; CHECK-UNALIGNED-RV64-ZBKB-NEXT: neg a0, a0 4880; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ori a0, a0, 1 4881; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 4882; 4883; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_16: 4884; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 4885; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 4886; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4887; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 16 4888; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 4889; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4890; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 4891; CHECK-UNALIGNED-RV32-V-NEXT: ret 4892; 4893; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_16: 4894; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 4895; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 4896; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4897; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 16 4898; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 4899; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4900; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 4901; CHECK-UNALIGNED-RV64-V-NEXT: ret 4902entry: 4903 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 16) 4904 ret i32 %memcmp 4905} 4906 4907define i32 @memcmp_size_31(ptr %s1, ptr %s2) nounwind { 4908; CHECK-ALIGNED-RV32-LABEL: memcmp_size_31: 4909; CHECK-ALIGNED-RV32: # %bb.0: # %entry 4910; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 4911; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4912; CHECK-ALIGNED-RV32-NEXT: li a2, 31 4913; CHECK-ALIGNED-RV32-NEXT: call memcmp 4914; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4915; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 4916; CHECK-ALIGNED-RV32-NEXT: ret 4917; 4918; CHECK-ALIGNED-RV64-LABEL: memcmp_size_31: 4919; CHECK-ALIGNED-RV64: # %bb.0: # %entry 4920; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 4921; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4922; CHECK-ALIGNED-RV64-NEXT: li a2, 31 4923; CHECK-ALIGNED-RV64-NEXT: call memcmp 4924; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4925; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 4926; CHECK-ALIGNED-RV64-NEXT: ret 4927; 4928; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_31: 4929; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 4930; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 4931; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4932; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 31 4933; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 4934; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4935; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 4936; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 4937; 4938; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_31: 4939; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 4940; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 4941; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4942; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 31 4943; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 4944; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4945; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 4946; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 4947; 4948; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_31: 4949; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 4950; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 4951; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4952; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 31 4953; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 4954; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4955; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 4956; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 4957; 4958; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_31: 4959; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 4960; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 4961; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4962; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 31 4963; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 4964; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4965; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 4966; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 4967; 4968; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_31: 4969; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 4970; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 4971; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4972; CHECK-ALIGNED-RV32-V-NEXT: li a2, 31 4973; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 4974; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4975; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 4976; CHECK-ALIGNED-RV32-V-NEXT: ret 4977; 4978; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_31: 4979; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 4980; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 4981; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 4982; CHECK-ALIGNED-RV64-V-NEXT: li a2, 31 4983; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 4984; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 4985; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 4986; CHECK-ALIGNED-RV64-V-NEXT: ret 4987; 4988; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_31: 4989; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 4990; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 4991; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 4992; CHECK-UNALIGNED-RV32-NEXT: li a2, 31 4993; CHECK-UNALIGNED-RV32-NEXT: call memcmp 4994; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 4995; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 4996; CHECK-UNALIGNED-RV32-NEXT: ret 4997; 4998; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_31: 4999; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 5000; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 5001; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5002; CHECK-UNALIGNED-RV64-NEXT: li a2, 31 5003; CHECK-UNALIGNED-RV64-NEXT: call memcmp 5004; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5005; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 5006; CHECK-UNALIGNED-RV64-NEXT: ret 5007; 5008; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_31: 5009; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 5010; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 5011; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 5012; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5013; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5014; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB34_9 5015; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.1: # %loadbb1 5016; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 4(a0) 5017; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 4(a1) 5018; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5019; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5020; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB34_9 5021; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.2: # %loadbb2 5022; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 8(a0) 5023; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 8(a1) 5024; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5025; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5026; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB34_9 5027; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.3: # %loadbb3 5028; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 12(a0) 5029; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 12(a1) 5030; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5031; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5032; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB34_9 5033; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.4: # %loadbb4 5034; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 16(a0) 5035; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 16(a1) 5036; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5037; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5038; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB34_9 5039; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.5: # %loadbb5 5040; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 20(a0) 5041; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 20(a1) 5042; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5043; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5044; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB34_9 5045; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.6: # %loadbb6 5046; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 24(a0) 5047; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 24(a1) 5048; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5049; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5050; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB34_9 5051; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.7: # %loadbb7 5052; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 27(a0) 5053; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 27(a1) 5054; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a0 5055; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a1 5056; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB34_9 5057; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.8: 5058; CHECK-UNALIGNED-RV32-ZBB-NEXT: li a0, 0 5059; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 5060; CHECK-UNALIGNED-RV32-ZBB-NEXT: .LBB34_9: # %res_block 5061; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a2, a3 5062; CHECK-UNALIGNED-RV32-ZBB-NEXT: neg a0, a0 5063; CHECK-UNALIGNED-RV32-ZBB-NEXT: ori a0, a0, 1 5064; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 5065; 5066; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_31: 5067; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 5068; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 5069; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 0(a1) 5070; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5071; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5072; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB34_5 5073; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.1: # %loadbb1 5074; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 8(a0) 5075; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 8(a1) 5076; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5077; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5078; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB34_5 5079; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.2: # %loadbb2 5080; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 16(a0) 5081; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 16(a1) 5082; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5083; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5084; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB34_5 5085; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.3: # %loadbb3 5086; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 23(a0) 5087; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 23(a1) 5088; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a0 5089; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a1 5090; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB34_5 5091; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.4: 5092; CHECK-UNALIGNED-RV64-ZBB-NEXT: li a0, 0 5093; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 5094; CHECK-UNALIGNED-RV64-ZBB-NEXT: .LBB34_5: # %res_block 5095; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a2, a3 5096; CHECK-UNALIGNED-RV64-ZBB-NEXT: neg a0, a0 5097; CHECK-UNALIGNED-RV64-ZBB-NEXT: ori a0, a0, 1 5098; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 5099; 5100; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_31: 5101; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 5102; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 5103; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 5104; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5105; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5106; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB34_9 5107; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.1: # %loadbb1 5108; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 4(a0) 5109; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 4(a1) 5110; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5111; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5112; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB34_9 5113; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.2: # %loadbb2 5114; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 8(a0) 5115; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 8(a1) 5116; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5117; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5118; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB34_9 5119; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.3: # %loadbb3 5120; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 12(a0) 5121; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 12(a1) 5122; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5123; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5124; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB34_9 5125; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.4: # %loadbb4 5126; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 16(a0) 5127; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 16(a1) 5128; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5129; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5130; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB34_9 5131; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.5: # %loadbb5 5132; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 20(a0) 5133; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 20(a1) 5134; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5135; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5136; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB34_9 5137; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.6: # %loadbb6 5138; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 24(a0) 5139; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 24(a1) 5140; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5141; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5142; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB34_9 5143; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.7: # %loadbb7 5144; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 27(a0) 5145; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 27(a1) 5146; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a0 5147; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a1 5148; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB34_9 5149; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.8: 5150; CHECK-UNALIGNED-RV32-ZBKB-NEXT: li a0, 0 5151; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 5152; CHECK-UNALIGNED-RV32-ZBKB-NEXT: .LBB34_9: # %res_block 5153; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a2, a3 5154; CHECK-UNALIGNED-RV32-ZBKB-NEXT: neg a0, a0 5155; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ori a0, a0, 1 5156; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 5157; 5158; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_31: 5159; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 5160; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 5161; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 0(a1) 5162; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5163; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5164; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB34_5 5165; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.1: # %loadbb1 5166; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 8(a0) 5167; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 8(a1) 5168; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5169; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5170; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB34_5 5171; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.2: # %loadbb2 5172; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 16(a0) 5173; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 16(a1) 5174; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5175; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5176; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB34_5 5177; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.3: # %loadbb3 5178; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 23(a0) 5179; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 23(a1) 5180; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a0 5181; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a1 5182; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB34_5 5183; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.4: 5184; CHECK-UNALIGNED-RV64-ZBKB-NEXT: li a0, 0 5185; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 5186; CHECK-UNALIGNED-RV64-ZBKB-NEXT: .LBB34_5: # %res_block 5187; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a2, a3 5188; CHECK-UNALIGNED-RV64-ZBKB-NEXT: neg a0, a0 5189; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ori a0, a0, 1 5190; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 5191; 5192; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_31: 5193; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 5194; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 5195; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5196; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 31 5197; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 5198; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5199; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 5200; CHECK-UNALIGNED-RV32-V-NEXT: ret 5201; 5202; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_31: 5203; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 5204; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 5205; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5206; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 31 5207; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 5208; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5209; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 5210; CHECK-UNALIGNED-RV64-V-NEXT: ret 5211entry: 5212 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 31) 5213 ret i32 %memcmp 5214} 5215 5216define i32 @memcmp_size_32(ptr %s1, ptr %s2) nounwind { 5217; CHECK-ALIGNED-RV32-LABEL: memcmp_size_32: 5218; CHECK-ALIGNED-RV32: # %bb.0: # %entry 5219; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 5220; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5221; CHECK-ALIGNED-RV32-NEXT: li a2, 32 5222; CHECK-ALIGNED-RV32-NEXT: call memcmp 5223; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5224; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 5225; CHECK-ALIGNED-RV32-NEXT: ret 5226; 5227; CHECK-ALIGNED-RV64-LABEL: memcmp_size_32: 5228; CHECK-ALIGNED-RV64: # %bb.0: # %entry 5229; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 5230; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5231; CHECK-ALIGNED-RV64-NEXT: li a2, 32 5232; CHECK-ALIGNED-RV64-NEXT: call memcmp 5233; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5234; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 5235; CHECK-ALIGNED-RV64-NEXT: ret 5236; 5237; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_size_32: 5238; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 5239; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 5240; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5241; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 32 5242; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 5243; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5244; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 5245; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 5246; 5247; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_32: 5248; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 5249; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 5250; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5251; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 32 5252; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 5253; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5254; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 5255; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 5256; 5257; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_size_32: 5258; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 5259; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 5260; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5261; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 32 5262; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 5263; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5264; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 5265; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 5266; 5267; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_32: 5268; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 5269; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 5270; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5271; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 32 5272; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 5273; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5274; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 5275; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 5276; 5277; CHECK-ALIGNED-RV32-V-LABEL: memcmp_size_32: 5278; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 5279; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 5280; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5281; CHECK-ALIGNED-RV32-V-NEXT: li a2, 32 5282; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 5283; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5284; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 5285; CHECK-ALIGNED-RV32-V-NEXT: ret 5286; 5287; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_32: 5288; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 5289; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 5290; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5291; CHECK-ALIGNED-RV64-V-NEXT: li a2, 32 5292; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 5293; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5294; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 5295; CHECK-ALIGNED-RV64-V-NEXT: ret 5296; 5297; CHECK-UNALIGNED-RV32-LABEL: memcmp_size_32: 5298; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 5299; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 5300; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5301; CHECK-UNALIGNED-RV32-NEXT: li a2, 32 5302; CHECK-UNALIGNED-RV32-NEXT: call memcmp 5303; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5304; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 5305; CHECK-UNALIGNED-RV32-NEXT: ret 5306; 5307; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_32: 5308; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 5309; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 5310; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5311; CHECK-UNALIGNED-RV64-NEXT: li a2, 32 5312; CHECK-UNALIGNED-RV64-NEXT: call memcmp 5313; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5314; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 5315; CHECK-UNALIGNED-RV64-NEXT: ret 5316; 5317; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_size_32: 5318; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 5319; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 0(a0) 5320; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 0(a1) 5321; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5322; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5323; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB35_9 5324; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.1: # %loadbb1 5325; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 4(a0) 5326; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 4(a1) 5327; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5328; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5329; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB35_9 5330; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.2: # %loadbb2 5331; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 8(a0) 5332; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 8(a1) 5333; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5334; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5335; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB35_9 5336; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.3: # %loadbb3 5337; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 12(a0) 5338; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 12(a1) 5339; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5340; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5341; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB35_9 5342; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.4: # %loadbb4 5343; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 16(a0) 5344; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 16(a1) 5345; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5346; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5347; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB35_9 5348; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.5: # %loadbb5 5349; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 20(a0) 5350; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 20(a1) 5351; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5352; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5353; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB35_9 5354; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.6: # %loadbb6 5355; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a2, 24(a0) 5356; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a3, 24(a1) 5357; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a2 5358; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a3 5359; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB35_9 5360; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.7: # %loadbb7 5361; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 28(a0) 5362; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 28(a1) 5363; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a2, a0 5364; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a3, a1 5365; CHECK-UNALIGNED-RV32-ZBB-NEXT: bne a2, a3, .LBB35_9 5366; CHECK-UNALIGNED-RV32-ZBB-NEXT: # %bb.8: 5367; CHECK-UNALIGNED-RV32-ZBB-NEXT: li a0, 0 5368; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 5369; CHECK-UNALIGNED-RV32-ZBB-NEXT: .LBB35_9: # %res_block 5370; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a2, a3 5371; CHECK-UNALIGNED-RV32-ZBB-NEXT: neg a0, a0 5372; CHECK-UNALIGNED-RV32-ZBB-NEXT: ori a0, a0, 1 5373; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 5374; 5375; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_32: 5376; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 5377; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 5378; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 0(a1) 5379; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5380; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5381; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB35_5 5382; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.1: # %loadbb1 5383; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 8(a0) 5384; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 8(a1) 5385; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5386; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5387; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB35_5 5388; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.2: # %loadbb2 5389; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 16(a0) 5390; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 16(a1) 5391; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5392; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5393; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB35_5 5394; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.3: # %loadbb3 5395; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 24(a0) 5396; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 24(a1) 5397; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a0 5398; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a1 5399; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB35_5 5400; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.4: 5401; CHECK-UNALIGNED-RV64-ZBB-NEXT: li a0, 0 5402; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 5403; CHECK-UNALIGNED-RV64-ZBB-NEXT: .LBB35_5: # %res_block 5404; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a2, a3 5405; CHECK-UNALIGNED-RV64-ZBB-NEXT: neg a0, a0 5406; CHECK-UNALIGNED-RV64-ZBB-NEXT: ori a0, a0, 1 5407; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 5408; 5409; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_size_32: 5410; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 5411; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 0(a0) 5412; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 0(a1) 5413; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5414; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5415; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB35_9 5416; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.1: # %loadbb1 5417; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 4(a0) 5418; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 4(a1) 5419; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5420; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5421; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB35_9 5422; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.2: # %loadbb2 5423; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 8(a0) 5424; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 8(a1) 5425; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5426; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5427; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB35_9 5428; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.3: # %loadbb3 5429; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 12(a0) 5430; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 12(a1) 5431; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5432; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5433; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB35_9 5434; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.4: # %loadbb4 5435; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 16(a0) 5436; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 16(a1) 5437; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5438; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5439; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB35_9 5440; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.5: # %loadbb5 5441; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 20(a0) 5442; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 20(a1) 5443; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5444; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5445; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB35_9 5446; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.6: # %loadbb6 5447; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a2, 24(a0) 5448; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a3, 24(a1) 5449; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a2 5450; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a3 5451; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB35_9 5452; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.7: # %loadbb7 5453; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 28(a0) 5454; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 28(a1) 5455; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a2, a0 5456; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a3, a1 5457; CHECK-UNALIGNED-RV32-ZBKB-NEXT: bne a2, a3, .LBB35_9 5458; CHECK-UNALIGNED-RV32-ZBKB-NEXT: # %bb.8: 5459; CHECK-UNALIGNED-RV32-ZBKB-NEXT: li a0, 0 5460; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 5461; CHECK-UNALIGNED-RV32-ZBKB-NEXT: .LBB35_9: # %res_block 5462; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a2, a3 5463; CHECK-UNALIGNED-RV32-ZBKB-NEXT: neg a0, a0 5464; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ori a0, a0, 1 5465; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 5466; 5467; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_32: 5468; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 5469; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 5470; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 0(a1) 5471; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5472; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5473; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB35_5 5474; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.1: # %loadbb1 5475; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 8(a0) 5476; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 8(a1) 5477; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5478; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5479; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB35_5 5480; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.2: # %loadbb2 5481; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 16(a0) 5482; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 16(a1) 5483; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5484; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5485; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB35_5 5486; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.3: # %loadbb3 5487; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 24(a0) 5488; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 24(a1) 5489; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a0 5490; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a1 5491; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB35_5 5492; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.4: 5493; CHECK-UNALIGNED-RV64-ZBKB-NEXT: li a0, 0 5494; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 5495; CHECK-UNALIGNED-RV64-ZBKB-NEXT: .LBB35_5: # %res_block 5496; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a2, a3 5497; CHECK-UNALIGNED-RV64-ZBKB-NEXT: neg a0, a0 5498; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ori a0, a0, 1 5499; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 5500; 5501; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_size_32: 5502; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 5503; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 5504; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5505; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 32 5506; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 5507; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5508; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 5509; CHECK-UNALIGNED-RV32-V-NEXT: ret 5510; 5511; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_32: 5512; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 5513; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 5514; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5515; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 32 5516; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 5517; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5518; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 5519; CHECK-UNALIGNED-RV64-V-NEXT: ret 5520entry: 5521 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 32) 5522 ret i32 %memcmp 5523} 5524 5525define i32 @memcmp_size_63(ptr %s1, ptr %s2) nounwind { 5526; CHECK-RV32-LABEL: memcmp_size_63: 5527; CHECK-RV32: # %bb.0: # %entry 5528; CHECK-RV32-NEXT: addi sp, sp, -16 5529; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5530; CHECK-RV32-NEXT: li a2, 63 5531; CHECK-RV32-NEXT: call memcmp 5532; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5533; CHECK-RV32-NEXT: addi sp, sp, 16 5534; CHECK-RV32-NEXT: ret 5535; 5536; CHECK-ALIGNED-RV64-LABEL: memcmp_size_63: 5537; CHECK-ALIGNED-RV64: # %bb.0: # %entry 5538; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 5539; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5540; CHECK-ALIGNED-RV64-NEXT: li a2, 63 5541; CHECK-ALIGNED-RV64-NEXT: call memcmp 5542; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5543; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 5544; CHECK-ALIGNED-RV64-NEXT: ret 5545; 5546; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_63: 5547; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 5548; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 5549; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5550; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 63 5551; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 5552; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5553; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 5554; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 5555; 5556; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_63: 5557; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 5558; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 5559; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5560; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 63 5561; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 5562; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5563; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 5564; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 5565; 5566; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_63: 5567; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 5568; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 5569; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5570; CHECK-ALIGNED-RV64-V-NEXT: li a2, 63 5571; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 5572; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5573; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 5574; CHECK-ALIGNED-RV64-V-NEXT: ret 5575; 5576; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_63: 5577; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 5578; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 5579; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5580; CHECK-UNALIGNED-RV64-NEXT: li a2, 63 5581; CHECK-UNALIGNED-RV64-NEXT: call memcmp 5582; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5583; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 5584; CHECK-UNALIGNED-RV64-NEXT: ret 5585; 5586; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_63: 5587; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 5588; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 5589; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 0(a1) 5590; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5591; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5592; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB36_9 5593; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.1: # %loadbb1 5594; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 8(a0) 5595; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 8(a1) 5596; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5597; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5598; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB36_9 5599; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.2: # %loadbb2 5600; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 16(a0) 5601; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 16(a1) 5602; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5603; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5604; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB36_9 5605; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.3: # %loadbb3 5606; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 24(a0) 5607; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 24(a1) 5608; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5609; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5610; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB36_9 5611; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.4: # %loadbb4 5612; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 32(a0) 5613; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 32(a1) 5614; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5615; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5616; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB36_9 5617; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.5: # %loadbb5 5618; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 40(a0) 5619; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 40(a1) 5620; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5621; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5622; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB36_9 5623; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.6: # %loadbb6 5624; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 48(a0) 5625; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 48(a1) 5626; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5627; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5628; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB36_9 5629; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.7: # %loadbb7 5630; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 55(a0) 5631; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 55(a1) 5632; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a0 5633; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a1 5634; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB36_9 5635; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.8: 5636; CHECK-UNALIGNED-RV64-ZBB-NEXT: li a0, 0 5637; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 5638; CHECK-UNALIGNED-RV64-ZBB-NEXT: .LBB36_9: # %res_block 5639; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a2, a3 5640; CHECK-UNALIGNED-RV64-ZBB-NEXT: neg a0, a0 5641; CHECK-UNALIGNED-RV64-ZBB-NEXT: ori a0, a0, 1 5642; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 5643; 5644; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_63: 5645; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 5646; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 5647; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 0(a1) 5648; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5649; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5650; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB36_9 5651; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.1: # %loadbb1 5652; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 8(a0) 5653; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 8(a1) 5654; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5655; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5656; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB36_9 5657; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.2: # %loadbb2 5658; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 16(a0) 5659; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 16(a1) 5660; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5661; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5662; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB36_9 5663; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.3: # %loadbb3 5664; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 24(a0) 5665; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 24(a1) 5666; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5667; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5668; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB36_9 5669; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.4: # %loadbb4 5670; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 32(a0) 5671; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 32(a1) 5672; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5673; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5674; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB36_9 5675; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.5: # %loadbb5 5676; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 40(a0) 5677; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 40(a1) 5678; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5679; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5680; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB36_9 5681; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.6: # %loadbb6 5682; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 48(a0) 5683; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 48(a1) 5684; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5685; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5686; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB36_9 5687; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.7: # %loadbb7 5688; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 55(a0) 5689; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 55(a1) 5690; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a0 5691; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a1 5692; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB36_9 5693; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.8: 5694; CHECK-UNALIGNED-RV64-ZBKB-NEXT: li a0, 0 5695; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 5696; CHECK-UNALIGNED-RV64-ZBKB-NEXT: .LBB36_9: # %res_block 5697; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a2, a3 5698; CHECK-UNALIGNED-RV64-ZBKB-NEXT: neg a0, a0 5699; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ori a0, a0, 1 5700; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 5701; 5702; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_63: 5703; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 5704; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 5705; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5706; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 63 5707; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 5708; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5709; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 5710; CHECK-UNALIGNED-RV64-V-NEXT: ret 5711entry: 5712 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 63) 5713 ret i32 %memcmp 5714} 5715 5716define i32 @memcmp_size_64(ptr %s1, ptr %s2) nounwind { 5717; CHECK-RV32-LABEL: memcmp_size_64: 5718; CHECK-RV32: # %bb.0: # %entry 5719; CHECK-RV32-NEXT: addi sp, sp, -16 5720; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5721; CHECK-RV32-NEXT: li a2, 64 5722; CHECK-RV32-NEXT: call memcmp 5723; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5724; CHECK-RV32-NEXT: addi sp, sp, 16 5725; CHECK-RV32-NEXT: ret 5726; 5727; CHECK-ALIGNED-RV64-LABEL: memcmp_size_64: 5728; CHECK-ALIGNED-RV64: # %bb.0: # %entry 5729; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 5730; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5731; CHECK-ALIGNED-RV64-NEXT: li a2, 64 5732; CHECK-ALIGNED-RV64-NEXT: call memcmp 5733; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5734; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 5735; CHECK-ALIGNED-RV64-NEXT: ret 5736; 5737; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_size_64: 5738; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 5739; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 5740; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5741; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 64 5742; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 5743; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5744; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 5745; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 5746; 5747; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_size_64: 5748; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 5749; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 5750; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5751; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 64 5752; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 5753; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5754; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 5755; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 5756; 5757; CHECK-ALIGNED-RV64-V-LABEL: memcmp_size_64: 5758; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 5759; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 5760; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5761; CHECK-ALIGNED-RV64-V-NEXT: li a2, 64 5762; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 5763; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5764; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 5765; CHECK-ALIGNED-RV64-V-NEXT: ret 5766; 5767; CHECK-UNALIGNED-RV64-LABEL: memcmp_size_64: 5768; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 5769; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 5770; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5771; CHECK-UNALIGNED-RV64-NEXT: li a2, 64 5772; CHECK-UNALIGNED-RV64-NEXT: call memcmp 5773; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5774; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 5775; CHECK-UNALIGNED-RV64-NEXT: ret 5776; 5777; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_size_64: 5778; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 5779; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 0(a0) 5780; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 0(a1) 5781; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5782; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5783; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB37_9 5784; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.1: # %loadbb1 5785; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 8(a0) 5786; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 8(a1) 5787; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5788; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5789; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB37_9 5790; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.2: # %loadbb2 5791; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 16(a0) 5792; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 16(a1) 5793; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5794; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5795; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB37_9 5796; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.3: # %loadbb3 5797; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 24(a0) 5798; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 24(a1) 5799; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5800; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5801; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB37_9 5802; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.4: # %loadbb4 5803; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 32(a0) 5804; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 32(a1) 5805; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5806; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5807; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB37_9 5808; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.5: # %loadbb5 5809; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 40(a0) 5810; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 40(a1) 5811; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5812; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5813; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB37_9 5814; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.6: # %loadbb6 5815; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a2, 48(a0) 5816; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a3, 48(a1) 5817; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a2 5818; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a3 5819; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB37_9 5820; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.7: # %loadbb7 5821; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a0, 56(a0) 5822; CHECK-UNALIGNED-RV64-ZBB-NEXT: ld a1, 56(a1) 5823; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a2, a0 5824; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a3, a1 5825; CHECK-UNALIGNED-RV64-ZBB-NEXT: bne a2, a3, .LBB37_9 5826; CHECK-UNALIGNED-RV64-ZBB-NEXT: # %bb.8: 5827; CHECK-UNALIGNED-RV64-ZBB-NEXT: li a0, 0 5828; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 5829; CHECK-UNALIGNED-RV64-ZBB-NEXT: .LBB37_9: # %res_block 5830; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a2, a3 5831; CHECK-UNALIGNED-RV64-ZBB-NEXT: neg a0, a0 5832; CHECK-UNALIGNED-RV64-ZBB-NEXT: ori a0, a0, 1 5833; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 5834; 5835; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_size_64: 5836; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 5837; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 0(a0) 5838; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 0(a1) 5839; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5840; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5841; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB37_9 5842; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.1: # %loadbb1 5843; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 8(a0) 5844; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 8(a1) 5845; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5846; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5847; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB37_9 5848; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.2: # %loadbb2 5849; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 16(a0) 5850; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 16(a1) 5851; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5852; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5853; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB37_9 5854; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.3: # %loadbb3 5855; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 24(a0) 5856; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 24(a1) 5857; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5858; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5859; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB37_9 5860; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.4: # %loadbb4 5861; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 32(a0) 5862; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 32(a1) 5863; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5864; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5865; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB37_9 5866; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.5: # %loadbb5 5867; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 40(a0) 5868; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 40(a1) 5869; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5870; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5871; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB37_9 5872; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.6: # %loadbb6 5873; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a2, 48(a0) 5874; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a3, 48(a1) 5875; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a2 5876; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a3 5877; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB37_9 5878; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.7: # %loadbb7 5879; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a0, 56(a0) 5880; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ld a1, 56(a1) 5881; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a2, a0 5882; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a3, a1 5883; CHECK-UNALIGNED-RV64-ZBKB-NEXT: bne a2, a3, .LBB37_9 5884; CHECK-UNALIGNED-RV64-ZBKB-NEXT: # %bb.8: 5885; CHECK-UNALIGNED-RV64-ZBKB-NEXT: li a0, 0 5886; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 5887; CHECK-UNALIGNED-RV64-ZBKB-NEXT: .LBB37_9: # %res_block 5888; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a2, a3 5889; CHECK-UNALIGNED-RV64-ZBKB-NEXT: neg a0, a0 5890; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ori a0, a0, 1 5891; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 5892; 5893; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_size_64: 5894; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 5895; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 5896; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5897; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 64 5898; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 5899; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5900; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 5901; CHECK-UNALIGNED-RV64-V-NEXT: ret 5902entry: 5903 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 64) 5904 ret i32 %memcmp 5905} 5906 5907define i32 @memcmp_size_127(ptr %s1, ptr %s2) nounwind { 5908; CHECK-RV32-LABEL: memcmp_size_127: 5909; CHECK-RV32: # %bb.0: # %entry 5910; CHECK-RV32-NEXT: addi sp, sp, -16 5911; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5912; CHECK-RV32-NEXT: li a2, 127 5913; CHECK-RV32-NEXT: call memcmp 5914; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5915; CHECK-RV32-NEXT: addi sp, sp, 16 5916; CHECK-RV32-NEXT: ret 5917; 5918; CHECK-RV64-LABEL: memcmp_size_127: 5919; CHECK-RV64: # %bb.0: # %entry 5920; CHECK-RV64-NEXT: addi sp, sp, -16 5921; CHECK-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5922; CHECK-RV64-NEXT: li a2, 127 5923; CHECK-RV64-NEXT: call memcmp 5924; CHECK-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5925; CHECK-RV64-NEXT: addi sp, sp, 16 5926; CHECK-RV64-NEXT: ret 5927entry: 5928 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 127) 5929 ret i32 %memcmp 5930} 5931 5932define i32 @memcmp_size_128(ptr %s1, ptr %s2) nounwind { 5933; CHECK-RV32-LABEL: memcmp_size_128: 5934; CHECK-RV32: # %bb.0: # %entry 5935; CHECK-RV32-NEXT: addi sp, sp, -16 5936; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5937; CHECK-RV32-NEXT: li a2, 128 5938; CHECK-RV32-NEXT: call memcmp 5939; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5940; CHECK-RV32-NEXT: addi sp, sp, 16 5941; CHECK-RV32-NEXT: ret 5942; 5943; CHECK-RV64-LABEL: memcmp_size_128: 5944; CHECK-RV64: # %bb.0: # %entry 5945; CHECK-RV64-NEXT: addi sp, sp, -16 5946; CHECK-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5947; CHECK-RV64-NEXT: li a2, 128 5948; CHECK-RV64-NEXT: call memcmp 5949; CHECK-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5950; CHECK-RV64-NEXT: addi sp, sp, 16 5951; CHECK-RV64-NEXT: ret 5952entry: 5953 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 128) 5954 ret i32 %memcmp 5955} 5956 5957define i32 @memcmp_size_runtime(ptr %s1, ptr %s2, iXLen %len) nounwind { 5958; CHECK-RV32-LABEL: memcmp_size_runtime: 5959; CHECK-RV32: # %bb.0: # %entry 5960; CHECK-RV32-NEXT: addi sp, sp, -16 5961; CHECK-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 5962; CHECK-RV32-NEXT: call memcmp 5963; CHECK-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 5964; CHECK-RV32-NEXT: addi sp, sp, 16 5965; CHECK-RV32-NEXT: ret 5966; 5967; CHECK-RV64-LABEL: memcmp_size_runtime: 5968; CHECK-RV64: # %bb.0: # %entry 5969; CHECK-RV64-NEXT: addi sp, sp, -16 5970; CHECK-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 5971; CHECK-RV64-NEXT: call memcmp 5972; CHECK-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 5973; CHECK-RV64-NEXT: addi sp, sp, 16 5974; CHECK-RV64-NEXT: ret 5975entry: 5976 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen %len) 5977 ret i32 %memcmp 5978} 5979 5980define i1 @memcmp_eq_zero(ptr %s1, ptr %s2) nounwind { 5981; CHECK-ALIGNED-RV32-LABEL: memcmp_eq_zero: 5982; CHECK-ALIGNED-RV32: # %bb.0: # %entry 5983; CHECK-ALIGNED-RV32-NEXT: lbu a2, 1(a1) 5984; CHECK-ALIGNED-RV32-NEXT: lbu a3, 2(a1) 5985; CHECK-ALIGNED-RV32-NEXT: lbu a4, 3(a1) 5986; CHECK-ALIGNED-RV32-NEXT: lbu a1, 0(a1) 5987; CHECK-ALIGNED-RV32-NEXT: slli a2, a2, 8 5988; CHECK-ALIGNED-RV32-NEXT: slli a3, a3, 16 5989; CHECK-ALIGNED-RV32-NEXT: slli a4, a4, 24 5990; CHECK-ALIGNED-RV32-NEXT: or a1, a2, a1 5991; CHECK-ALIGNED-RV32-NEXT: lbu a2, 0(a0) 5992; CHECK-ALIGNED-RV32-NEXT: lbu a5, 1(a0) 5993; CHECK-ALIGNED-RV32-NEXT: or a3, a4, a3 5994; CHECK-ALIGNED-RV32-NEXT: lbu a4, 2(a0) 5995; CHECK-ALIGNED-RV32-NEXT: lbu a0, 3(a0) 5996; CHECK-ALIGNED-RV32-NEXT: slli a5, a5, 8 5997; CHECK-ALIGNED-RV32-NEXT: or a2, a5, a2 5998; CHECK-ALIGNED-RV32-NEXT: slli a4, a4, 16 5999; CHECK-ALIGNED-RV32-NEXT: slli a0, a0, 24 6000; CHECK-ALIGNED-RV32-NEXT: or a0, a0, a4 6001; CHECK-ALIGNED-RV32-NEXT: or a1, a3, a1 6002; CHECK-ALIGNED-RV32-NEXT: or a0, a0, a2 6003; CHECK-ALIGNED-RV32-NEXT: xor a0, a0, a1 6004; CHECK-ALIGNED-RV32-NEXT: seqz a0, a0 6005; CHECK-ALIGNED-RV32-NEXT: ret 6006; 6007; CHECK-ALIGNED-RV64-LABEL: memcmp_eq_zero: 6008; CHECK-ALIGNED-RV64: # %bb.0: # %entry 6009; CHECK-ALIGNED-RV64-NEXT: lbu a2, 1(a1) 6010; CHECK-ALIGNED-RV64-NEXT: lbu a3, 2(a1) 6011; CHECK-ALIGNED-RV64-NEXT: lb a4, 3(a1) 6012; CHECK-ALIGNED-RV64-NEXT: lbu a1, 0(a1) 6013; CHECK-ALIGNED-RV64-NEXT: slli a2, a2, 8 6014; CHECK-ALIGNED-RV64-NEXT: slli a3, a3, 16 6015; CHECK-ALIGNED-RV64-NEXT: slli a4, a4, 24 6016; CHECK-ALIGNED-RV64-NEXT: or a1, a2, a1 6017; CHECK-ALIGNED-RV64-NEXT: lbu a2, 0(a0) 6018; CHECK-ALIGNED-RV64-NEXT: lbu a5, 1(a0) 6019; CHECK-ALIGNED-RV64-NEXT: or a3, a4, a3 6020; CHECK-ALIGNED-RV64-NEXT: lbu a4, 2(a0) 6021; CHECK-ALIGNED-RV64-NEXT: lb a0, 3(a0) 6022; CHECK-ALIGNED-RV64-NEXT: slli a5, a5, 8 6023; CHECK-ALIGNED-RV64-NEXT: or a2, a5, a2 6024; CHECK-ALIGNED-RV64-NEXT: slli a4, a4, 16 6025; CHECK-ALIGNED-RV64-NEXT: slli a0, a0, 24 6026; CHECK-ALIGNED-RV64-NEXT: or a0, a0, a4 6027; CHECK-ALIGNED-RV64-NEXT: or a1, a3, a1 6028; CHECK-ALIGNED-RV64-NEXT: or a0, a0, a2 6029; CHECK-ALIGNED-RV64-NEXT: xor a0, a0, a1 6030; CHECK-ALIGNED-RV64-NEXT: seqz a0, a0 6031; CHECK-ALIGNED-RV64-NEXT: ret 6032; 6033; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_eq_zero: 6034; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 6035; CHECK-ALIGNED-RV32-ZBB-NEXT: lbu a2, 1(a1) 6036; CHECK-ALIGNED-RV32-ZBB-NEXT: lbu a3, 2(a1) 6037; CHECK-ALIGNED-RV32-ZBB-NEXT: lbu a4, 3(a1) 6038; CHECK-ALIGNED-RV32-ZBB-NEXT: lbu a1, 0(a1) 6039; CHECK-ALIGNED-RV32-ZBB-NEXT: slli a2, a2, 8 6040; CHECK-ALIGNED-RV32-ZBB-NEXT: slli a3, a3, 16 6041; CHECK-ALIGNED-RV32-ZBB-NEXT: slli a4, a4, 24 6042; CHECK-ALIGNED-RV32-ZBB-NEXT: or a1, a2, a1 6043; CHECK-ALIGNED-RV32-ZBB-NEXT: lbu a2, 0(a0) 6044; CHECK-ALIGNED-RV32-ZBB-NEXT: lbu a5, 1(a0) 6045; CHECK-ALIGNED-RV32-ZBB-NEXT: or a3, a4, a3 6046; CHECK-ALIGNED-RV32-ZBB-NEXT: lbu a4, 2(a0) 6047; CHECK-ALIGNED-RV32-ZBB-NEXT: lbu a0, 3(a0) 6048; CHECK-ALIGNED-RV32-ZBB-NEXT: slli a5, a5, 8 6049; CHECK-ALIGNED-RV32-ZBB-NEXT: or a2, a5, a2 6050; CHECK-ALIGNED-RV32-ZBB-NEXT: slli a4, a4, 16 6051; CHECK-ALIGNED-RV32-ZBB-NEXT: slli a0, a0, 24 6052; CHECK-ALIGNED-RV32-ZBB-NEXT: or a0, a0, a4 6053; CHECK-ALIGNED-RV32-ZBB-NEXT: or a1, a3, a1 6054; CHECK-ALIGNED-RV32-ZBB-NEXT: or a0, a0, a2 6055; CHECK-ALIGNED-RV32-ZBB-NEXT: xor a0, a0, a1 6056; CHECK-ALIGNED-RV32-ZBB-NEXT: seqz a0, a0 6057; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 6058; 6059; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_eq_zero: 6060; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 6061; CHECK-ALIGNED-RV64-ZBB-NEXT: lbu a2, 1(a1) 6062; CHECK-ALIGNED-RV64-ZBB-NEXT: lbu a3, 2(a1) 6063; CHECK-ALIGNED-RV64-ZBB-NEXT: lb a4, 3(a1) 6064; CHECK-ALIGNED-RV64-ZBB-NEXT: lbu a1, 0(a1) 6065; CHECK-ALIGNED-RV64-ZBB-NEXT: slli a2, a2, 8 6066; CHECK-ALIGNED-RV64-ZBB-NEXT: slli a3, a3, 16 6067; CHECK-ALIGNED-RV64-ZBB-NEXT: slli a4, a4, 24 6068; CHECK-ALIGNED-RV64-ZBB-NEXT: or a1, a2, a1 6069; CHECK-ALIGNED-RV64-ZBB-NEXT: lbu a2, 0(a0) 6070; CHECK-ALIGNED-RV64-ZBB-NEXT: lbu a5, 1(a0) 6071; CHECK-ALIGNED-RV64-ZBB-NEXT: or a3, a4, a3 6072; CHECK-ALIGNED-RV64-ZBB-NEXT: lbu a4, 2(a0) 6073; CHECK-ALIGNED-RV64-ZBB-NEXT: lb a0, 3(a0) 6074; CHECK-ALIGNED-RV64-ZBB-NEXT: slli a5, a5, 8 6075; CHECK-ALIGNED-RV64-ZBB-NEXT: or a2, a5, a2 6076; CHECK-ALIGNED-RV64-ZBB-NEXT: slli a4, a4, 16 6077; CHECK-ALIGNED-RV64-ZBB-NEXT: slli a0, a0, 24 6078; CHECK-ALIGNED-RV64-ZBB-NEXT: or a0, a0, a4 6079; CHECK-ALIGNED-RV64-ZBB-NEXT: or a1, a3, a1 6080; CHECK-ALIGNED-RV64-ZBB-NEXT: or a0, a0, a2 6081; CHECK-ALIGNED-RV64-ZBB-NEXT: xor a0, a0, a1 6082; CHECK-ALIGNED-RV64-ZBB-NEXT: seqz a0, a0 6083; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 6084; 6085; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_eq_zero: 6086; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 6087; CHECK-ALIGNED-RV32-ZBKB-NEXT: lbu a2, 0(a1) 6088; CHECK-ALIGNED-RV32-ZBKB-NEXT: lbu a3, 1(a1) 6089; CHECK-ALIGNED-RV32-ZBKB-NEXT: lbu a4, 2(a1) 6090; CHECK-ALIGNED-RV32-ZBKB-NEXT: lbu a1, 3(a1) 6091; CHECK-ALIGNED-RV32-ZBKB-NEXT: lbu a5, 1(a0) 6092; CHECK-ALIGNED-RV32-ZBKB-NEXT: lbu a6, 2(a0) 6093; CHECK-ALIGNED-RV32-ZBKB-NEXT: lbu a7, 3(a0) 6094; CHECK-ALIGNED-RV32-ZBKB-NEXT: lbu a0, 0(a0) 6095; CHECK-ALIGNED-RV32-ZBKB-NEXT: packh a1, a4, a1 6096; CHECK-ALIGNED-RV32-ZBKB-NEXT: packh a2, a2, a3 6097; CHECK-ALIGNED-RV32-ZBKB-NEXT: packh a3, a6, a7 6098; CHECK-ALIGNED-RV32-ZBKB-NEXT: packh a0, a0, a5 6099; CHECK-ALIGNED-RV32-ZBKB-NEXT: pack a1, a2, a1 6100; CHECK-ALIGNED-RV32-ZBKB-NEXT: pack a0, a0, a3 6101; CHECK-ALIGNED-RV32-ZBKB-NEXT: xor a0, a0, a1 6102; CHECK-ALIGNED-RV32-ZBKB-NEXT: seqz a0, a0 6103; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 6104; 6105; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_eq_zero: 6106; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 6107; CHECK-ALIGNED-RV64-ZBKB-NEXT: lbu a2, 0(a1) 6108; CHECK-ALIGNED-RV64-ZBKB-NEXT: lbu a3, 1(a1) 6109; CHECK-ALIGNED-RV64-ZBKB-NEXT: lbu a4, 2(a1) 6110; CHECK-ALIGNED-RV64-ZBKB-NEXT: lb a1, 3(a1) 6111; CHECK-ALIGNED-RV64-ZBKB-NEXT: lbu a5, 0(a0) 6112; CHECK-ALIGNED-RV64-ZBKB-NEXT: lbu a6, 1(a0) 6113; CHECK-ALIGNED-RV64-ZBKB-NEXT: packh a2, a2, a3 6114; CHECK-ALIGNED-RV64-ZBKB-NEXT: lbu a3, 2(a0) 6115; CHECK-ALIGNED-RV64-ZBKB-NEXT: lb a0, 3(a0) 6116; CHECK-ALIGNED-RV64-ZBKB-NEXT: packh a5, a5, a6 6117; CHECK-ALIGNED-RV64-ZBKB-NEXT: slli a4, a4, 16 6118; CHECK-ALIGNED-RV64-ZBKB-NEXT: slli a1, a1, 24 6119; CHECK-ALIGNED-RV64-ZBKB-NEXT: or a1, a1, a4 6120; CHECK-ALIGNED-RV64-ZBKB-NEXT: slli a3, a3, 16 6121; CHECK-ALIGNED-RV64-ZBKB-NEXT: slli a0, a0, 24 6122; CHECK-ALIGNED-RV64-ZBKB-NEXT: or a0, a0, a3 6123; CHECK-ALIGNED-RV64-ZBKB-NEXT: or a1, a1, a2 6124; CHECK-ALIGNED-RV64-ZBKB-NEXT: or a0, a0, a5 6125; CHECK-ALIGNED-RV64-ZBKB-NEXT: xor a0, a0, a1 6126; CHECK-ALIGNED-RV64-ZBKB-NEXT: seqz a0, a0 6127; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 6128; 6129; CHECK-ALIGNED-RV32-V-LABEL: memcmp_eq_zero: 6130; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 6131; CHECK-ALIGNED-RV32-V-NEXT: lbu a2, 1(a1) 6132; CHECK-ALIGNED-RV32-V-NEXT: lbu a3, 2(a1) 6133; CHECK-ALIGNED-RV32-V-NEXT: lbu a4, 3(a1) 6134; CHECK-ALIGNED-RV32-V-NEXT: lbu a1, 0(a1) 6135; CHECK-ALIGNED-RV32-V-NEXT: slli a2, a2, 8 6136; CHECK-ALIGNED-RV32-V-NEXT: slli a3, a3, 16 6137; CHECK-ALIGNED-RV32-V-NEXT: slli a4, a4, 24 6138; CHECK-ALIGNED-RV32-V-NEXT: or a1, a2, a1 6139; CHECK-ALIGNED-RV32-V-NEXT: lbu a2, 0(a0) 6140; CHECK-ALIGNED-RV32-V-NEXT: lbu a5, 1(a0) 6141; CHECK-ALIGNED-RV32-V-NEXT: or a3, a4, a3 6142; CHECK-ALIGNED-RV32-V-NEXT: lbu a4, 2(a0) 6143; CHECK-ALIGNED-RV32-V-NEXT: lbu a0, 3(a0) 6144; CHECK-ALIGNED-RV32-V-NEXT: slli a5, a5, 8 6145; CHECK-ALIGNED-RV32-V-NEXT: or a2, a5, a2 6146; CHECK-ALIGNED-RV32-V-NEXT: slli a4, a4, 16 6147; CHECK-ALIGNED-RV32-V-NEXT: slli a0, a0, 24 6148; CHECK-ALIGNED-RV32-V-NEXT: or a0, a0, a4 6149; CHECK-ALIGNED-RV32-V-NEXT: or a1, a3, a1 6150; CHECK-ALIGNED-RV32-V-NEXT: or a0, a0, a2 6151; CHECK-ALIGNED-RV32-V-NEXT: xor a0, a0, a1 6152; CHECK-ALIGNED-RV32-V-NEXT: seqz a0, a0 6153; CHECK-ALIGNED-RV32-V-NEXT: ret 6154; 6155; CHECK-ALIGNED-RV64-V-LABEL: memcmp_eq_zero: 6156; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 6157; CHECK-ALIGNED-RV64-V-NEXT: lbu a2, 1(a1) 6158; CHECK-ALIGNED-RV64-V-NEXT: lbu a3, 2(a1) 6159; CHECK-ALIGNED-RV64-V-NEXT: lb a4, 3(a1) 6160; CHECK-ALIGNED-RV64-V-NEXT: lbu a1, 0(a1) 6161; CHECK-ALIGNED-RV64-V-NEXT: slli a2, a2, 8 6162; CHECK-ALIGNED-RV64-V-NEXT: slli a3, a3, 16 6163; CHECK-ALIGNED-RV64-V-NEXT: slli a4, a4, 24 6164; CHECK-ALIGNED-RV64-V-NEXT: or a1, a2, a1 6165; CHECK-ALIGNED-RV64-V-NEXT: lbu a2, 0(a0) 6166; CHECK-ALIGNED-RV64-V-NEXT: lbu a5, 1(a0) 6167; CHECK-ALIGNED-RV64-V-NEXT: or a3, a4, a3 6168; CHECK-ALIGNED-RV64-V-NEXT: lbu a4, 2(a0) 6169; CHECK-ALIGNED-RV64-V-NEXT: lb a0, 3(a0) 6170; CHECK-ALIGNED-RV64-V-NEXT: slli a5, a5, 8 6171; CHECK-ALIGNED-RV64-V-NEXT: or a2, a5, a2 6172; CHECK-ALIGNED-RV64-V-NEXT: slli a4, a4, 16 6173; CHECK-ALIGNED-RV64-V-NEXT: slli a0, a0, 24 6174; CHECK-ALIGNED-RV64-V-NEXT: or a0, a0, a4 6175; CHECK-ALIGNED-RV64-V-NEXT: or a1, a3, a1 6176; CHECK-ALIGNED-RV64-V-NEXT: or a0, a0, a2 6177; CHECK-ALIGNED-RV64-V-NEXT: xor a0, a0, a1 6178; CHECK-ALIGNED-RV64-V-NEXT: seqz a0, a0 6179; CHECK-ALIGNED-RV64-V-NEXT: ret 6180; 6181; CHECK-UNALIGNED-LABEL: memcmp_eq_zero: 6182; CHECK-UNALIGNED: # %bb.0: # %entry 6183; CHECK-UNALIGNED-NEXT: lw a0, 0(a0) 6184; CHECK-UNALIGNED-NEXT: lw a1, 0(a1) 6185; CHECK-UNALIGNED-NEXT: xor a0, a0, a1 6186; CHECK-UNALIGNED-NEXT: seqz a0, a0 6187; CHECK-UNALIGNED-NEXT: ret 6188entry: 6189 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4) 6190 %ret = icmp eq i32 %memcmp, 0 6191 ret i1 %ret 6192} 6193 6194define i1 @memcmp_lt_zero(ptr %s1, ptr %s2) nounwind { 6195; CHECK-ALIGNED-RV32-LABEL: memcmp_lt_zero: 6196; CHECK-ALIGNED-RV32: # %bb.0: # %entry 6197; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 6198; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6199; CHECK-ALIGNED-RV32-NEXT: li a2, 4 6200; CHECK-ALIGNED-RV32-NEXT: call memcmp 6201; CHECK-ALIGNED-RV32-NEXT: srli a0, a0, 31 6202; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6203; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 6204; CHECK-ALIGNED-RV32-NEXT: ret 6205; 6206; CHECK-ALIGNED-RV64-LABEL: memcmp_lt_zero: 6207; CHECK-ALIGNED-RV64: # %bb.0: # %entry 6208; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 6209; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6210; CHECK-ALIGNED-RV64-NEXT: li a2, 4 6211; CHECK-ALIGNED-RV64-NEXT: call memcmp 6212; CHECK-ALIGNED-RV64-NEXT: slti a0, a0, 0 6213; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6214; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 6215; CHECK-ALIGNED-RV64-NEXT: ret 6216; 6217; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_lt_zero: 6218; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 6219; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 6220; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6221; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 6222; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 6223; CHECK-ALIGNED-RV32-ZBB-NEXT: srli a0, a0, 31 6224; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6225; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 6226; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 6227; 6228; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_lt_zero: 6229; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 6230; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 6231; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6232; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 6233; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 6234; CHECK-ALIGNED-RV64-ZBB-NEXT: slti a0, a0, 0 6235; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6236; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 6237; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 6238; 6239; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_lt_zero: 6240; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 6241; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 6242; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6243; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 6244; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 6245; CHECK-ALIGNED-RV32-ZBKB-NEXT: srli a0, a0, 31 6246; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6247; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 6248; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 6249; 6250; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_lt_zero: 6251; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 6252; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 6253; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6254; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 6255; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 6256; CHECK-ALIGNED-RV64-ZBKB-NEXT: slti a0, a0, 0 6257; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6258; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 6259; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 6260; 6261; CHECK-ALIGNED-RV32-V-LABEL: memcmp_lt_zero: 6262; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 6263; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 6264; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6265; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 6266; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 6267; CHECK-ALIGNED-RV32-V-NEXT: srli a0, a0, 31 6268; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6269; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 6270; CHECK-ALIGNED-RV32-V-NEXT: ret 6271; 6272; CHECK-ALIGNED-RV64-V-LABEL: memcmp_lt_zero: 6273; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 6274; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 6275; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6276; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 6277; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 6278; CHECK-ALIGNED-RV64-V-NEXT: slti a0, a0, 0 6279; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6280; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 6281; CHECK-ALIGNED-RV64-V-NEXT: ret 6282; 6283; CHECK-UNALIGNED-RV32-LABEL: memcmp_lt_zero: 6284; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 6285; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 6286; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6287; CHECK-UNALIGNED-RV32-NEXT: li a2, 4 6288; CHECK-UNALIGNED-RV32-NEXT: call memcmp 6289; CHECK-UNALIGNED-RV32-NEXT: srli a0, a0, 31 6290; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6291; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 6292; CHECK-UNALIGNED-RV32-NEXT: ret 6293; 6294; CHECK-UNALIGNED-RV64-LABEL: memcmp_lt_zero: 6295; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 6296; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 6297; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6298; CHECK-UNALIGNED-RV64-NEXT: li a2, 4 6299; CHECK-UNALIGNED-RV64-NEXT: call memcmp 6300; CHECK-UNALIGNED-RV64-NEXT: slti a0, a0, 0 6301; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6302; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 6303; CHECK-UNALIGNED-RV64-NEXT: ret 6304; 6305; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_lt_zero: 6306; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 6307; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 0(a0) 6308; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 0(a1) 6309; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a0, a0 6310; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a1, a1 6311; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a0, a1 6312; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 6313; 6314; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_lt_zero: 6315; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 6316; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a0, 0(a0) 6317; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a1, 0(a1) 6318; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 6319; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 6320; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a0, a0, 32 6321; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a1, a1, 32 6322; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a0, a1 6323; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 6324; 6325; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_lt_zero: 6326; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 6327; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 0(a0) 6328; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 0(a1) 6329; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a0, a0 6330; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a1, a1 6331; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a0, a1 6332; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 6333; 6334; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_lt_zero: 6335; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 6336; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a0, 0(a0) 6337; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a1, 0(a1) 6338; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 6339; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 6340; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a0, a0, 32 6341; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a1, a1, 32 6342; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a0, a1 6343; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 6344; 6345; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_lt_zero: 6346; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 6347; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 6348; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6349; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 4 6350; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 6351; CHECK-UNALIGNED-RV32-V-NEXT: srli a0, a0, 31 6352; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6353; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 6354; CHECK-UNALIGNED-RV32-V-NEXT: ret 6355; 6356; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_lt_zero: 6357; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 6358; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 6359; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6360; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 4 6361; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 6362; CHECK-UNALIGNED-RV64-V-NEXT: slti a0, a0, 0 6363; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6364; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 6365; CHECK-UNALIGNED-RV64-V-NEXT: ret 6366entry: 6367 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4) 6368 %ret = icmp slt i32 %memcmp, 0 6369 ret i1 %ret 6370} 6371 6372define i1 @memcmp_gt_zero(ptr %s1, ptr %s2) nounwind { 6373; CHECK-ALIGNED-RV32-LABEL: memcmp_gt_zero: 6374; CHECK-ALIGNED-RV32: # %bb.0: # %entry 6375; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 6376; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6377; CHECK-ALIGNED-RV32-NEXT: li a2, 4 6378; CHECK-ALIGNED-RV32-NEXT: call memcmp 6379; CHECK-ALIGNED-RV32-NEXT: sgtz a0, a0 6380; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6381; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 6382; CHECK-ALIGNED-RV32-NEXT: ret 6383; 6384; CHECK-ALIGNED-RV64-LABEL: memcmp_gt_zero: 6385; CHECK-ALIGNED-RV64: # %bb.0: # %entry 6386; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 6387; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6388; CHECK-ALIGNED-RV64-NEXT: li a2, 4 6389; CHECK-ALIGNED-RV64-NEXT: call memcmp 6390; CHECK-ALIGNED-RV64-NEXT: sgtz a0, a0 6391; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6392; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 6393; CHECK-ALIGNED-RV64-NEXT: ret 6394; 6395; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_gt_zero: 6396; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 6397; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 6398; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6399; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 6400; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 6401; CHECK-ALIGNED-RV32-ZBB-NEXT: sgtz a0, a0 6402; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6403; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 6404; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 6405; 6406; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_gt_zero: 6407; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 6408; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 6409; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6410; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 6411; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 6412; CHECK-ALIGNED-RV64-ZBB-NEXT: sgtz a0, a0 6413; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6414; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 6415; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 6416; 6417; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_gt_zero: 6418; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 6419; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 6420; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6421; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 6422; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 6423; CHECK-ALIGNED-RV32-ZBKB-NEXT: sgtz a0, a0 6424; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6425; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 6426; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 6427; 6428; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_gt_zero: 6429; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 6430; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 6431; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6432; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 6433; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 6434; CHECK-ALIGNED-RV64-ZBKB-NEXT: sgtz a0, a0 6435; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6436; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 6437; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 6438; 6439; CHECK-ALIGNED-RV32-V-LABEL: memcmp_gt_zero: 6440; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 6441; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 6442; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6443; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 6444; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 6445; CHECK-ALIGNED-RV32-V-NEXT: sgtz a0, a0 6446; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6447; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 6448; CHECK-ALIGNED-RV32-V-NEXT: ret 6449; 6450; CHECK-ALIGNED-RV64-V-LABEL: memcmp_gt_zero: 6451; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 6452; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 6453; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6454; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 6455; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 6456; CHECK-ALIGNED-RV64-V-NEXT: sgtz a0, a0 6457; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6458; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 6459; CHECK-ALIGNED-RV64-V-NEXT: ret 6460; 6461; CHECK-UNALIGNED-RV32-LABEL: memcmp_gt_zero: 6462; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 6463; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 6464; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6465; CHECK-UNALIGNED-RV32-NEXT: li a2, 4 6466; CHECK-UNALIGNED-RV32-NEXT: call memcmp 6467; CHECK-UNALIGNED-RV32-NEXT: sgtz a0, a0 6468; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6469; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 6470; CHECK-UNALIGNED-RV32-NEXT: ret 6471; 6472; CHECK-UNALIGNED-RV64-LABEL: memcmp_gt_zero: 6473; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 6474; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 6475; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6476; CHECK-UNALIGNED-RV64-NEXT: li a2, 4 6477; CHECK-UNALIGNED-RV64-NEXT: call memcmp 6478; CHECK-UNALIGNED-RV64-NEXT: sgtz a0, a0 6479; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6480; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 6481; CHECK-UNALIGNED-RV64-NEXT: ret 6482; 6483; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_gt_zero: 6484; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 6485; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 0(a0) 6486; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 0(a1) 6487; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a0, a0 6488; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a1, a1 6489; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a1, a0 6490; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 6491; 6492; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_gt_zero: 6493; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 6494; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a0, 0(a0) 6495; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a1, 0(a1) 6496; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 6497; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 6498; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a0, a0, 32 6499; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a1, a1, 32 6500; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a1, a0 6501; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 6502; 6503; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_gt_zero: 6504; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 6505; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 0(a0) 6506; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 0(a1) 6507; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a0, a0 6508; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a1, a1 6509; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a1, a0 6510; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 6511; 6512; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_gt_zero: 6513; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 6514; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a0, 0(a0) 6515; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a1, 0(a1) 6516; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 6517; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 6518; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a0, a0, 32 6519; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a1, a1, 32 6520; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a1, a0 6521; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 6522; 6523; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_gt_zero: 6524; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 6525; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 6526; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6527; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 4 6528; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 6529; CHECK-UNALIGNED-RV32-V-NEXT: sgtz a0, a0 6530; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6531; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 6532; CHECK-UNALIGNED-RV32-V-NEXT: ret 6533; 6534; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_gt_zero: 6535; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 6536; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 6537; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6538; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 4 6539; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 6540; CHECK-UNALIGNED-RV64-V-NEXT: sgtz a0, a0 6541; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6542; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 6543; CHECK-UNALIGNED-RV64-V-NEXT: ret 6544entry: 6545 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4) 6546 %ret = icmp sgt i32 %memcmp, 0 6547 ret i1 %ret 6548} 6549 6550define i1 @memcmp_le_zero(ptr %s1, ptr %s2) nounwind { 6551; CHECK-ALIGNED-RV32-LABEL: memcmp_le_zero: 6552; CHECK-ALIGNED-RV32: # %bb.0: # %entry 6553; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 6554; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6555; CHECK-ALIGNED-RV32-NEXT: li a2, 4 6556; CHECK-ALIGNED-RV32-NEXT: call memcmp 6557; CHECK-ALIGNED-RV32-NEXT: slti a0, a0, 1 6558; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6559; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 6560; CHECK-ALIGNED-RV32-NEXT: ret 6561; 6562; CHECK-ALIGNED-RV64-LABEL: memcmp_le_zero: 6563; CHECK-ALIGNED-RV64: # %bb.0: # %entry 6564; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 6565; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6566; CHECK-ALIGNED-RV64-NEXT: li a2, 4 6567; CHECK-ALIGNED-RV64-NEXT: call memcmp 6568; CHECK-ALIGNED-RV64-NEXT: slti a0, a0, 1 6569; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6570; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 6571; CHECK-ALIGNED-RV64-NEXT: ret 6572; 6573; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_le_zero: 6574; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 6575; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 6576; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6577; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 6578; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 6579; CHECK-ALIGNED-RV32-ZBB-NEXT: slti a0, a0, 1 6580; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6581; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 6582; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 6583; 6584; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_le_zero: 6585; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 6586; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 6587; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6588; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 6589; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 6590; CHECK-ALIGNED-RV64-ZBB-NEXT: slti a0, a0, 1 6591; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6592; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 6593; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 6594; 6595; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_le_zero: 6596; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 6597; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 6598; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6599; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 6600; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 6601; CHECK-ALIGNED-RV32-ZBKB-NEXT: slti a0, a0, 1 6602; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6603; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 6604; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 6605; 6606; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_le_zero: 6607; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 6608; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 6609; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6610; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 6611; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 6612; CHECK-ALIGNED-RV64-ZBKB-NEXT: slti a0, a0, 1 6613; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6614; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 6615; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 6616; 6617; CHECK-ALIGNED-RV32-V-LABEL: memcmp_le_zero: 6618; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 6619; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 6620; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6621; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 6622; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 6623; CHECK-ALIGNED-RV32-V-NEXT: slti a0, a0, 1 6624; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6625; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 6626; CHECK-ALIGNED-RV32-V-NEXT: ret 6627; 6628; CHECK-ALIGNED-RV64-V-LABEL: memcmp_le_zero: 6629; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 6630; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 6631; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6632; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 6633; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 6634; CHECK-ALIGNED-RV64-V-NEXT: slti a0, a0, 1 6635; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6636; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 6637; CHECK-ALIGNED-RV64-V-NEXT: ret 6638; 6639; CHECK-UNALIGNED-RV32-LABEL: memcmp_le_zero: 6640; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 6641; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 6642; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6643; CHECK-UNALIGNED-RV32-NEXT: li a2, 4 6644; CHECK-UNALIGNED-RV32-NEXT: call memcmp 6645; CHECK-UNALIGNED-RV32-NEXT: slti a0, a0, 1 6646; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6647; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 6648; CHECK-UNALIGNED-RV32-NEXT: ret 6649; 6650; CHECK-UNALIGNED-RV64-LABEL: memcmp_le_zero: 6651; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 6652; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 6653; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6654; CHECK-UNALIGNED-RV64-NEXT: li a2, 4 6655; CHECK-UNALIGNED-RV64-NEXT: call memcmp 6656; CHECK-UNALIGNED-RV64-NEXT: slti a0, a0, 1 6657; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6658; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 6659; CHECK-UNALIGNED-RV64-NEXT: ret 6660; 6661; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_le_zero: 6662; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 6663; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 0(a0) 6664; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 0(a1) 6665; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a0, a0 6666; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a1, a1 6667; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a1, a0 6668; CHECK-UNALIGNED-RV32-ZBB-NEXT: xori a0, a0, 1 6669; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 6670; 6671; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_le_zero: 6672; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 6673; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a0, 0(a0) 6674; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a1, 0(a1) 6675; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 6676; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 6677; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a0, a0, 32 6678; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a1, a1, 32 6679; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a1, a0 6680; CHECK-UNALIGNED-RV64-ZBB-NEXT: xori a0, a0, 1 6681; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 6682; 6683; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_le_zero: 6684; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 6685; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 0(a0) 6686; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 0(a1) 6687; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a0, a0 6688; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a1, a1 6689; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a1, a0 6690; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xori a0, a0, 1 6691; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 6692; 6693; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_le_zero: 6694; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 6695; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a0, 0(a0) 6696; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a1, 0(a1) 6697; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 6698; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 6699; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a0, a0, 32 6700; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a1, a1, 32 6701; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a1, a0 6702; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xori a0, a0, 1 6703; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 6704; 6705; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_le_zero: 6706; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 6707; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 6708; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6709; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 4 6710; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 6711; CHECK-UNALIGNED-RV32-V-NEXT: slti a0, a0, 1 6712; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6713; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 6714; CHECK-UNALIGNED-RV32-V-NEXT: ret 6715; 6716; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_le_zero: 6717; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 6718; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 6719; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6720; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 4 6721; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 6722; CHECK-UNALIGNED-RV64-V-NEXT: slti a0, a0, 1 6723; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6724; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 6725; CHECK-UNALIGNED-RV64-V-NEXT: ret 6726entry: 6727 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4) 6728 %ret = icmp slt i32 %memcmp, 1 6729 ret i1 %ret 6730} 6731 6732define i1 @memcmp_ge_zero(ptr %s1, ptr %s2) nounwind { 6733; CHECK-ALIGNED-RV32-LABEL: memcmp_ge_zero: 6734; CHECK-ALIGNED-RV32: # %bb.0: # %entry 6735; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, -16 6736; CHECK-ALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6737; CHECK-ALIGNED-RV32-NEXT: li a2, 4 6738; CHECK-ALIGNED-RV32-NEXT: call memcmp 6739; CHECK-ALIGNED-RV32-NEXT: slti a0, a0, 0 6740; CHECK-ALIGNED-RV32-NEXT: xori a0, a0, 1 6741; CHECK-ALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6742; CHECK-ALIGNED-RV32-NEXT: addi sp, sp, 16 6743; CHECK-ALIGNED-RV32-NEXT: ret 6744; 6745; CHECK-ALIGNED-RV64-LABEL: memcmp_ge_zero: 6746; CHECK-ALIGNED-RV64: # %bb.0: # %entry 6747; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, -16 6748; CHECK-ALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6749; CHECK-ALIGNED-RV64-NEXT: li a2, 4 6750; CHECK-ALIGNED-RV64-NEXT: call memcmp 6751; CHECK-ALIGNED-RV64-NEXT: slti a0, a0, 0 6752; CHECK-ALIGNED-RV64-NEXT: xori a0, a0, 1 6753; CHECK-ALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6754; CHECK-ALIGNED-RV64-NEXT: addi sp, sp, 16 6755; CHECK-ALIGNED-RV64-NEXT: ret 6756; 6757; CHECK-ALIGNED-RV32-ZBB-LABEL: memcmp_ge_zero: 6758; CHECK-ALIGNED-RV32-ZBB: # %bb.0: # %entry 6759; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, -16 6760; CHECK-ALIGNED-RV32-ZBB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6761; CHECK-ALIGNED-RV32-ZBB-NEXT: li a2, 4 6762; CHECK-ALIGNED-RV32-ZBB-NEXT: call memcmp 6763; CHECK-ALIGNED-RV32-ZBB-NEXT: slti a0, a0, 0 6764; CHECK-ALIGNED-RV32-ZBB-NEXT: xori a0, a0, 1 6765; CHECK-ALIGNED-RV32-ZBB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6766; CHECK-ALIGNED-RV32-ZBB-NEXT: addi sp, sp, 16 6767; CHECK-ALIGNED-RV32-ZBB-NEXT: ret 6768; 6769; CHECK-ALIGNED-RV64-ZBB-LABEL: memcmp_ge_zero: 6770; CHECK-ALIGNED-RV64-ZBB: # %bb.0: # %entry 6771; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, -16 6772; CHECK-ALIGNED-RV64-ZBB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6773; CHECK-ALIGNED-RV64-ZBB-NEXT: li a2, 4 6774; CHECK-ALIGNED-RV64-ZBB-NEXT: call memcmp 6775; CHECK-ALIGNED-RV64-ZBB-NEXT: slti a0, a0, 0 6776; CHECK-ALIGNED-RV64-ZBB-NEXT: xori a0, a0, 1 6777; CHECK-ALIGNED-RV64-ZBB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6778; CHECK-ALIGNED-RV64-ZBB-NEXT: addi sp, sp, 16 6779; CHECK-ALIGNED-RV64-ZBB-NEXT: ret 6780; 6781; CHECK-ALIGNED-RV32-ZBKB-LABEL: memcmp_ge_zero: 6782; CHECK-ALIGNED-RV32-ZBKB: # %bb.0: # %entry 6783; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, -16 6784; CHECK-ALIGNED-RV32-ZBKB-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6785; CHECK-ALIGNED-RV32-ZBKB-NEXT: li a2, 4 6786; CHECK-ALIGNED-RV32-ZBKB-NEXT: call memcmp 6787; CHECK-ALIGNED-RV32-ZBKB-NEXT: slti a0, a0, 0 6788; CHECK-ALIGNED-RV32-ZBKB-NEXT: xori a0, a0, 1 6789; CHECK-ALIGNED-RV32-ZBKB-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6790; CHECK-ALIGNED-RV32-ZBKB-NEXT: addi sp, sp, 16 6791; CHECK-ALIGNED-RV32-ZBKB-NEXT: ret 6792; 6793; CHECK-ALIGNED-RV64-ZBKB-LABEL: memcmp_ge_zero: 6794; CHECK-ALIGNED-RV64-ZBKB: # %bb.0: # %entry 6795; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, -16 6796; CHECK-ALIGNED-RV64-ZBKB-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6797; CHECK-ALIGNED-RV64-ZBKB-NEXT: li a2, 4 6798; CHECK-ALIGNED-RV64-ZBKB-NEXT: call memcmp 6799; CHECK-ALIGNED-RV64-ZBKB-NEXT: slti a0, a0, 0 6800; CHECK-ALIGNED-RV64-ZBKB-NEXT: xori a0, a0, 1 6801; CHECK-ALIGNED-RV64-ZBKB-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6802; CHECK-ALIGNED-RV64-ZBKB-NEXT: addi sp, sp, 16 6803; CHECK-ALIGNED-RV64-ZBKB-NEXT: ret 6804; 6805; CHECK-ALIGNED-RV32-V-LABEL: memcmp_ge_zero: 6806; CHECK-ALIGNED-RV32-V: # %bb.0: # %entry 6807; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, -16 6808; CHECK-ALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6809; CHECK-ALIGNED-RV32-V-NEXT: li a2, 4 6810; CHECK-ALIGNED-RV32-V-NEXT: call memcmp 6811; CHECK-ALIGNED-RV32-V-NEXT: slti a0, a0, 0 6812; CHECK-ALIGNED-RV32-V-NEXT: xori a0, a0, 1 6813; CHECK-ALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6814; CHECK-ALIGNED-RV32-V-NEXT: addi sp, sp, 16 6815; CHECK-ALIGNED-RV32-V-NEXT: ret 6816; 6817; CHECK-ALIGNED-RV64-V-LABEL: memcmp_ge_zero: 6818; CHECK-ALIGNED-RV64-V: # %bb.0: # %entry 6819; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, -16 6820; CHECK-ALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6821; CHECK-ALIGNED-RV64-V-NEXT: li a2, 4 6822; CHECK-ALIGNED-RV64-V-NEXT: call memcmp 6823; CHECK-ALIGNED-RV64-V-NEXT: slti a0, a0, 0 6824; CHECK-ALIGNED-RV64-V-NEXT: xori a0, a0, 1 6825; CHECK-ALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6826; CHECK-ALIGNED-RV64-V-NEXT: addi sp, sp, 16 6827; CHECK-ALIGNED-RV64-V-NEXT: ret 6828; 6829; CHECK-UNALIGNED-RV32-LABEL: memcmp_ge_zero: 6830; CHECK-UNALIGNED-RV32: # %bb.0: # %entry 6831; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, -16 6832; CHECK-UNALIGNED-RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6833; CHECK-UNALIGNED-RV32-NEXT: li a2, 4 6834; CHECK-UNALIGNED-RV32-NEXT: call memcmp 6835; CHECK-UNALIGNED-RV32-NEXT: slti a0, a0, 0 6836; CHECK-UNALIGNED-RV32-NEXT: xori a0, a0, 1 6837; CHECK-UNALIGNED-RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6838; CHECK-UNALIGNED-RV32-NEXT: addi sp, sp, 16 6839; CHECK-UNALIGNED-RV32-NEXT: ret 6840; 6841; CHECK-UNALIGNED-RV64-LABEL: memcmp_ge_zero: 6842; CHECK-UNALIGNED-RV64: # %bb.0: # %entry 6843; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, -16 6844; CHECK-UNALIGNED-RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6845; CHECK-UNALIGNED-RV64-NEXT: li a2, 4 6846; CHECK-UNALIGNED-RV64-NEXT: call memcmp 6847; CHECK-UNALIGNED-RV64-NEXT: slti a0, a0, 0 6848; CHECK-UNALIGNED-RV64-NEXT: xori a0, a0, 1 6849; CHECK-UNALIGNED-RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6850; CHECK-UNALIGNED-RV64-NEXT: addi sp, sp, 16 6851; CHECK-UNALIGNED-RV64-NEXT: ret 6852; 6853; CHECK-UNALIGNED-RV32-ZBB-LABEL: memcmp_ge_zero: 6854; CHECK-UNALIGNED-RV32-ZBB: # %bb.0: # %entry 6855; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a0, 0(a0) 6856; CHECK-UNALIGNED-RV32-ZBB-NEXT: lw a1, 0(a1) 6857; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a0, a0 6858; CHECK-UNALIGNED-RV32-ZBB-NEXT: rev8 a1, a1 6859; CHECK-UNALIGNED-RV32-ZBB-NEXT: sltu a0, a0, a1 6860; CHECK-UNALIGNED-RV32-ZBB-NEXT: xori a0, a0, 1 6861; CHECK-UNALIGNED-RV32-ZBB-NEXT: ret 6862; 6863; CHECK-UNALIGNED-RV64-ZBB-LABEL: memcmp_ge_zero: 6864; CHECK-UNALIGNED-RV64-ZBB: # %bb.0: # %entry 6865; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a0, 0(a0) 6866; CHECK-UNALIGNED-RV64-ZBB-NEXT: lw a1, 0(a1) 6867; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a0, a0 6868; CHECK-UNALIGNED-RV64-ZBB-NEXT: rev8 a1, a1 6869; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a0, a0, 32 6870; CHECK-UNALIGNED-RV64-ZBB-NEXT: srli a1, a1, 32 6871; CHECK-UNALIGNED-RV64-ZBB-NEXT: sltu a0, a0, a1 6872; CHECK-UNALIGNED-RV64-ZBB-NEXT: xori a0, a0, 1 6873; CHECK-UNALIGNED-RV64-ZBB-NEXT: ret 6874; 6875; CHECK-UNALIGNED-RV32-ZBKB-LABEL: memcmp_ge_zero: 6876; CHECK-UNALIGNED-RV32-ZBKB: # %bb.0: # %entry 6877; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a0, 0(a0) 6878; CHECK-UNALIGNED-RV32-ZBKB-NEXT: lw a1, 0(a1) 6879; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a0, a0 6880; CHECK-UNALIGNED-RV32-ZBKB-NEXT: rev8 a1, a1 6881; CHECK-UNALIGNED-RV32-ZBKB-NEXT: sltu a0, a0, a1 6882; CHECK-UNALIGNED-RV32-ZBKB-NEXT: xori a0, a0, 1 6883; CHECK-UNALIGNED-RV32-ZBKB-NEXT: ret 6884; 6885; CHECK-UNALIGNED-RV64-ZBKB-LABEL: memcmp_ge_zero: 6886; CHECK-UNALIGNED-RV64-ZBKB: # %bb.0: # %entry 6887; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a0, 0(a0) 6888; CHECK-UNALIGNED-RV64-ZBKB-NEXT: lw a1, 0(a1) 6889; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a0, a0 6890; CHECK-UNALIGNED-RV64-ZBKB-NEXT: rev8 a1, a1 6891; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a0, a0, 32 6892; CHECK-UNALIGNED-RV64-ZBKB-NEXT: srli a1, a1, 32 6893; CHECK-UNALIGNED-RV64-ZBKB-NEXT: sltu a0, a0, a1 6894; CHECK-UNALIGNED-RV64-ZBKB-NEXT: xori a0, a0, 1 6895; CHECK-UNALIGNED-RV64-ZBKB-NEXT: ret 6896; 6897; CHECK-UNALIGNED-RV32-V-LABEL: memcmp_ge_zero: 6898; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry 6899; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, -16 6900; CHECK-UNALIGNED-RV32-V-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 6901; CHECK-UNALIGNED-RV32-V-NEXT: li a2, 4 6902; CHECK-UNALIGNED-RV32-V-NEXT: call memcmp 6903; CHECK-UNALIGNED-RV32-V-NEXT: slti a0, a0, 0 6904; CHECK-UNALIGNED-RV32-V-NEXT: xori a0, a0, 1 6905; CHECK-UNALIGNED-RV32-V-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 6906; CHECK-UNALIGNED-RV32-V-NEXT: addi sp, sp, 16 6907; CHECK-UNALIGNED-RV32-V-NEXT: ret 6908; 6909; CHECK-UNALIGNED-RV64-V-LABEL: memcmp_ge_zero: 6910; CHECK-UNALIGNED-RV64-V: # %bb.0: # %entry 6911; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, -16 6912; CHECK-UNALIGNED-RV64-V-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 6913; CHECK-UNALIGNED-RV64-V-NEXT: li a2, 4 6914; CHECK-UNALIGNED-RV64-V-NEXT: call memcmp 6915; CHECK-UNALIGNED-RV64-V-NEXT: slti a0, a0, 0 6916; CHECK-UNALIGNED-RV64-V-NEXT: xori a0, a0, 1 6917; CHECK-UNALIGNED-RV64-V-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 6918; CHECK-UNALIGNED-RV64-V-NEXT: addi sp, sp, 16 6919; CHECK-UNALIGNED-RV64-V-NEXT: ret 6920entry: 6921 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iXLen 4) 6922 %ret = icmp sgt i32 %memcmp, -1 6923 ret i1 %ret 6924} 6925;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 6926; CHECK-ALIGNED: {{.*}} 6927