// RUN: %clang_cc1 -triple avr -target-cpu atmega328 -emit-llvm < %s | FileCheck %s // This test case verifies https://github.com/llvm/llvm-project/issues/176830, // and the test code is gained from // https://github.com/avrdudes/avr-libc/blob/main/include/string.h unsigned int strlen(const char *__s) { if (__builtin_constant_p (__builtin_strlen (__s))) { return __builtin_strlen (__s); } else { register const char *__r24 __asm("24") = __s; register unsigned int __res __asm("24"); // CHECK: call addrspace(0) i16 asm "call ${2:x}", "={r24},{r24},i,~{r30},~{r31},~{memory}"(ptr %1, ptr addrspace(1) @strlen) __asm ("%~call %x2" : "=r" (__res) : "r" (__r24), "i" (strlen) : "30", "31", "memory"); return __res; } }