360 changes: 157 additions & 203 deletions llvm/test/Transforms/ExpandMemCmp/X86/memcmp-x32.ll

Large diffs are not rendered by default.

736 changes: 297 additions & 439 deletions llvm/test/Transforms/ExpandMemCmp/X86/memcmp.ll

Large diffs are not rendered by default.

40 changes: 40 additions & 0 deletions llvm/test/Transforms/InstCombine/wcslen-1.ll
Original file line number Diff line number Diff line change
Expand Up @@ -214,4 +214,44 @@ define i64 @test_simplify12() {
ret i64 %l
}

@ws = constant [10 x i32] [i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0]

; Fold wcslen(ws + 2) => 7.
define i64 @fold_wcslen_1() {
; CHECK-LABEL: @fold_wcslen_1(
; CHECK-NEXT: ret i64 7
;
%p = getelementptr inbounds [10 x i32], ptr @ws, i64 0, i64 2
%len = tail call i64 @wcslen(ptr %p)
ret i64 %len
}

; Should not crash on this, and no optimization expected (idea is to get into
; llvm::getConstantDataArrayInfo looking for an array with 32-bit elements but
; with an offset that isn't a multiple of the element size).
define i64 @no_fold_wcslen_1() {
; CHECK-LABEL: @no_fold_wcslen_1(
; CHECK-NEXT: %len = tail call i64 @wcslen(ptr nonnull getelementptr inbounds ([15 x i8], ptr @ws, i64 0, i64 3))
; CHECK-NEXT: ret i64 %len
;
%p = getelementptr [15 x i8], ptr @ws, i64 0, i64 3
%len = tail call i64 @wcslen(ptr %p)
ret i64 %len
}

@s8 = constant [10 x i8] [i8 9, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0]

; Should not crash on this, and no optimization expected (idea is to get into
; llvm::getConstantDataArrayInfo looking for an array with 32-bit elements but
; with an offset that isn't a multiple of the element size).
define i64 @no_fold_wcslen_2() {
; CHECK-LABEL: @no_fold_wcslen_2(
; CHECK-NEXT: %len = tail call i64 @wcslen(ptr nonnull getelementptr inbounds ([10 x i8], ptr @s8, i64 0, i64 3))
; CHECK-NEXT: ret i64 %len
;
%p = getelementptr [10 x i8], ptr @s8, i64 0, i64 3
%len = tail call i64 @wcslen(ptr %p)
ret i64 %len
}

attributes #0 = { null_pointer_is_valid }