| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt -passes=expand-memcmp -mtriple=riscv64-unknown-elf -mattr=+unaligned-scalar-mem -S < %s | llc -mtriple=riscv64-unknown-elf -mattr=+unaligned-scalar-mem -O1 | FileCheck %s |
| |
| @.str.45 = constant [4 x i8] c" 16\00" |
| @.str.47 = constant [4 x i8] c"-0E\00" |
| |
| declare i32 @memcmp(ptr, ptr, i64) |
| |
| define i1 @test() { |
| ; CHECK-LABEL: test: |
| ; CHECK: # %bb.0: # %domemcmp23 |
| ; CHECK-NEXT: addi sp, sp, -64 |
| ; CHECK-NEXT: .cfi_def_cfa_offset 64 |
| ; CHECK-NEXT: .cfi_remember_state |
| ; CHECK-NEXT: lui a0, 3 |
| ; CHECK-NEXT: sb zero, 0(zero) |
| ; CHECK-NEXT: addi a1, a0, 288 |
| ; CHECK-NEXT: li a2, 54 |
| ; CHECK-NEXT: sh a1, 0(sp) |
| ; CHECK-NEXT: sb a2, 2(sp) |
| ; CHECK-NEXT: bnez zero, .LBB0_2 |
| ; CHECK-NEXT: # %bb.1: # %assertPassed44 |
| ; CHECK-NEXT: lh a1, 0(zero) |
| ; CHECK-NEXT: lbu a2, 2(zero) |
| ; CHECK-NEXT: addi a0, a0, 45 |
| ; CHECK-NEXT: xor a0, a1, a0 |
| ; CHECK-NEXT: xori a1, a2, 69 |
| ; CHECK-NEXT: or a0, a0, a1 |
| ; CHECK-NEXT: slli a0, a0, 48 |
| ; CHECK-NEXT: seqz a0, a0 |
| ; CHECK-NEXT: addi sp, sp, 64 |
| ; CHECK-NEXT: .cfi_def_cfa_offset 0 |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB0_2: # %assertFailed45 |
| domemcmp23: |
| %buffer = alloca [64 x i8], align 1 |
| store i8 0, ptr null, align 4294967296 |
| %0 = getelementptr i8, ptr %buffer, i64 1 |
| store i8 49, ptr %0, align 1 |
| %1 = getelementptr i8, ptr %buffer, i64 2 |
| store i8 32, ptr %buffer, align 1 |
| store i8 54, ptr %1, align 1 |
| %2 = call i32 @memcmp(ptr %buffer, ptr @.str.45, i64 3) |
| %3 = icmp eq i32 %2, 0 |
| br i1 %3, label %assertPassed44, label %assertFailed45 |
| |
| assertPassed44: |
| %4 = call i32 @memcmp(ptr null, ptr @.str.47, i64 3) |
| %5 = icmp eq i32 %4, 0 |
| ret i1 %5 |
| |
| assertFailed45: |
| unreachable |
| } |